OC基础——ARC和Block



一、ARC
ARC(自动回收内存机制 是自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最大的优点就是极大的提高了程序编写效率,开发者不需要关心对象的销毁时间,不需要担心程序的内存泄露问题。

二、Block
1、作用: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封装代码的三种方式
//1>带有形参
^(int a ,int b){
 return a+b;
};//不要忘记;号

//2>无形参
^(){
NSLog(@"_________");
};

//或者
^{
   NSLog(@"__________");
};
5、block访问外面变量
1> block内部可以访问外面的变量;
2> 默认情况下,block内部不能修改外部的局部变量;
3> 给局部变量加上_block关键字,那么这个局部变量就可以在block内部修改。
eg:
int sum = 10;
int (^MyBlock)(int) = ^(int num) {
	sum++;//编译报错,如果要修改,只需要在局部变量前加__block:
};
6、利用typedef定义Block类型
eg:typedef int (^MyBlock)(int,int);//以后就可以利用MyBlock这种类型来定义block变量。      
MyBlock b;
       b = ^(int a ,int b){
      return a-b
};
//或
MyBlock b = ^(int a ,int b){
      return a-b
};
7、block与函数
1>相同点:(1)都可以保存代码;
                 (2)都有返回值;
                 (3)都有形参;
                 (4)调用方式一样。eg: myblock(10,12);

2>不同点:(1)block的标识符是^,而函数没有;
                 (2)block默认情况下不能修改局部变量,而函数在默认情况下可以修改成员变量。
                 (3)在block情况下,当语句结束时,需要在大括号外部添加分号;,而函数不需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值