ios黑马程序员--ARC

强指针:默认情况下所有的指针都

是强指针型(strong) 在Arc当中

,一个对象只要没有强指针引用,

那么它就会被系统回收

弱指针:弱指针不影响对象的回收

在Arc当中,所有的跟手动管理内存

相关的方法都不能调用比如说

dealloc不能重写父类 了(不能

super dealloc)

//__weak定义一个弱指针

__weak Person * p2 = p//弱指针

不影响对象

//强指针引用使用OC对象类型,

@property (nonatomic,strong)

我们用别人的项目有可能用的是非

arc的项目

-fno-objc-arc

-f-objc-arc

第三方框架:就是别人写的项目,

我们要用,如果他是非arc机制,给

编译器加一个参数-fno-objc-arc就

是告诉编译器这个文件就是非Arc机

制的,这样就不会报错了,并且非

arc手动内存管理的方法都能够正常

调用 了,在非arc项目中引入 arc机

制的文件,给编译器加一个参数 -

f-bojc-arc,就是告诉编译器这个文

件是arc机制的

edit->refactor-convert to

arc循环引用问题

arc机制中如果出现了循环引用问题

, 只需要把其中引用一方变成,

weak弱指针既可解决问题

block类型

int bool char float double

NSObject * id sel

他们的共同特点就是能够定义成变

1.int a = 0;

BOOL b = YES;

2.当做函数,和方法的参数的传递

(void) test(int) a

block:是oc中比较特殊的数据类型

,它用来封装一段代码,并且可以

把这段代码当做参数传递

1.通过{}来封装代码

1.void test():返回值为空,并且没

有参数{}

^{};

2.int test();有返回值,还有一个参

^{return 10;}

3.int test(int a);有返回值,还有一

个参数

^(int a){return a + 1}

4.int test(int a,int b)有返回值,有

多个参数

1.定义一个返回值为空,并且没有

参数的block变量

void (^myblock)() = ^{};

2.定义一个有返回值的,并且没有

参数的block变量

int (^myblock)() = ^{return

10;};

3.定义一个有返回值,并且有一个

参数的block变量

int (^myblock)(int a) = ^(int

a){return a + 1};

4.定义一个有返回值,并且有多个

参数的block变量

int (^myblock) (int a,int b) =

^(int a,int b){return a + b}

block好处就是,我定义block的人

本身可以不关心

//block内部算法的实现

//谁调用有block参数的方法,谁就

给我实现block内部算法

协议

协议就是用来声明方法

@protocol Myprotocol

- (void)test;

@end

在.m中实现协议中的方法

@required表示以下方法必须实现

- (void) test1;

@optional 表示可选实现

- (void)test2;

可选的就不会在遵守协议的那个类

里面显示

但是,required就会提示你必须实

协议本身他可以遵循其他的协议

协议可以遵循多个

基协议

协议就是用来声明方法的

@protocol Myprotocol

<NSObject>

内部声明方法

@end

协议内方法的约束

@required必须实现的方法

@optional 选择实现

默认的方法就是 必须实现的

让某个类遵循协议只需要在类继承

后面 <协议名字>

类可以遵循多个协议<协议名,协议

名,协议名>

协议本身也可以遵循其他协议<协议

名字>

协议当中不可以声明成员变量

子类继承了父类,同样也会继承父

类遵循的协议

NSObject * obj = [[NSObject]

init];

id obj2= [[NSObject alloc] init];

//定义OC对象变量时,可以给他加

一个协议约束

Person<Myprotocol> *p  =

[[Person alloc] init];

@property (nonatomic,strong)

Car<Myprotocol2> * car;

//如果你要限定某个对象,一定要实

现某个协议,那么我们一般用

id<Myprotocol2>obj 去定义

@property (nonatomic,strong)id

<Myprotocol2> obj;

//与@class功能一样,就是告诉类

,MyProtocol是一个协议

@protocol MyProtocol;

把协议声明到 一个类的.h文件中,

其他类继承之外,没办法去遵循这

个协议了

单独把协议定义成一个.h,任意类

都可以遵循这个协议,

时间: 2024-12-20 17:22:24

ios黑马程序员--ARC的相关文章

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

黑马程序员:Android N与iOS 10的明争暗斗

在上个月召开的I/O大会上Google透露了关于Android N的诸多新功能,黑马程序员当时对Google在Android系统新特性和新功能进行了较为全面的跟踪介绍.时隔1个月,在刚刚结束的WWDC大会上,苹果推出了iOS 10.对比这两个历来明争暗斗的系统,不少媒体称:Google和苹果抄袭与沿用特性对方的行为更进一步.与此同时,面对两大系统的重磅升级,黑马程序员研发出了最新的课程,并将课程升级到最新版. 透过Android与iOS学院讲师的“比拼与厮杀”,今天就来对比一下新的iOS 10与

黑马程序员:为苹果与iOS开发者的前景正名

据不完全局部统计,近期iOS开发爱好者的热点仍然是:“iOS 开发行业前景不明朗.”因而有一部分初级开发者和业外人士,觉得这是苹果公司的锅!接下来笔者将带着大家慢慢分析,看看到底苹果公司与iOS开发者的前景到底如何? 关于苹果方面的舆论,相信大多数人都有听过这些: iOS的市场份额远不如Android的市场份额! 苹果太贵了,买的人一定少! 苹果前段时间股票大跌!是不是要快完蛋了? iPhoneSE销量下滑,苹果危机咯! 笔者在此说:这都算什么? 相信很多人都看过这张图. 笔者想说,这种对比是不

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员_OC语言前期准备

OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应用程序. 拓展名:c语言-.c  OC语言.-m  兼容C++.-mm 注:其实c语言和oc甚至任何一门语言都只是我们为了实现一些功能,达到一些效果而采用的工具,抛开语法的差别外,我想最重要的应该是在解决问题的时候考虑的角度和方法不一样而已,然而这也构成了学习一门语言的重要性. 二.语法预览 (一)

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------