一、ARCARC(自动回收内存机制) 是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。不再需要担心内存管理,因为编译器已处理了一切。1、指针分为两种:强指针和弱指针1> 强指针:默认情况下所有的指针都是强指针(__strong)2> 弱指针:__week
2、ARC判断标准:只要没有强指针指向对象,就会释放对象,不需要再dealloc里面收到release。eg:Person *P = [[Person alloc]init];//默认情况下为强指针指向。p = nil; //执行这行后会自动释放person对象。
3、ARC特点:1> 不允许调用release、retain、retainCount;2> 允许重写dealloc,但是不允许调用[super dealloc];3> @property 参数(1)strong:成员变量是强指针(适用于OC对象)(2)week:成员变量是弱指针(适用于OC对象)(3)assign:适用于非OC对象类型4> 以前的retain改为strong(用retain的地方全部换成strong),其他一切不变。eg:@property(nonatomic,retain) Dog *dog;改成:@property(nonatomic,strong)Dog *dog
4、ARC循环引用的解决方案1>ARC:一端用strong,一端用week(非ARC:一端用retain,一端用assign)eg:Dog端:@property(nonatomic,weak)Person *person;Person端:@property(nonatomic,strong)Dog *dog;
总之:ARC最大的优点就是极大的提高了程序编写效率,开发者不需要关心对象的销毁时间,不需要担心程序的内存泄露问题。
二、Block1、作用:block封装了一段代码,可以方便程序随时调用某段代码或者某个功能,提高了程序编写效率,减少了程序的垃圾代码。2、标志:^eg:int (^sunblock)(int,int) =^(int a,int b){ return a+b; };//定义了一个叫sumblock的对象,它带有两个参数,返回。等式右边就是的具体实现
调用:int sum = sumblock(10,20)3、block变量的定义:返回值类型(^block名称)(形参类型);eg:int (^sumblock)(int,int);或 void(^myblock)();4、利用block封装代码的三种方式5、block访问外面变量//1>带有形参 ^(int a ,int b){ return a+b; };//不要忘记;号 //2>无形参 ^(){ NSLog(@"_________"); }; //或者 ^{ NSLog(@"__________"); };
1> block内部可以访问外面的变量;2> 默认情况下,block内部不能修改外部的局部变量;3> 给局部变量加上_block关键字,那么这个局部变量就可以在block内部修改。
eg:6、利用typedef定义Block类型int sum = 10; int (^MyBlock)(int) = ^(int num) { sum++;//编译报错,如果要修改,只需要在局部变量前加__block: };
eg:typedef int (^MyBlock)(int,int);//以后就可以利用MyBlock这种类型来定义block变量。7、block与函数MyBlock b; b = ^(int a ,int b){ return a-b }; //或 MyBlock b = ^(int a ,int b){ return a-b };
1>相同点:(1)都可以保存代码;(2)都有返回值;(3)都有形参;(4)调用方式一样。eg: myblock(10,12);
2>不同点:(1)block的标识符是^,而函数没有;(2)block默认情况下不能修改局部变量,而函数在默认情况下可以修改成员变量。(3)在block情况下,当语句结束时,需要在大括号外部添加分号;,而函数不需要。
OC基础——ARC和Block
最新推荐文章于 2024-07-16 15:22:36 发布