ios开发-OC中ARC、block和protocol的学习


  今天,我学习了OC中ARC,block,和protocol,以下是具体内容:

 .ARC的学习:

    1.ARC的判断标准:

       只要没有强指针指向的对象,就会被释放.

    2.ARC的特点:

         1)不允许调用releaseretainretainCount;

         2)允许重写dealloc,但是不允许调用[super dealloc];

    3.@property的参数

         1)strong:成员变量是强指针(适用于OC对象类型)

         2)weak:成员变量是弱指针(适用于OC对象类型)

         3)assign :适用于非OC对象类型

         4)以前的retain改为用strong

    4.指针的分类:

        1)强指针:默认情况下,定义的所有指针都是强指针 __strong

        2)弱指针:__weak,不可以来定义一个对象,没有意义

    5.property函数声明的写法:

        1)针对OC对象:

            @property (nonatomic, strong) Car * car

        2)针对非OC对象:

            @property (nonatomic, agssign) int age;

 .循环引用的学习:

   当定义了两个类的时候,相互引用,会导致两个类都不能正常释放,此时的解决方法是:

         1)ARC

         1端用strong,另1端用weak

         

         2)ARC

         1端用retain,另1端用assign

   例如:

             int main()

             {

                     Person *p = [[Person alloc] init];

                     

                     

                     Dog *d = [[Dog alloc] init];

                     p.dog = d;

                     d.person = p;

                     

                     return 0;

             }

 .block的学习:

    1.如何定义block变量

         int (^sumBlock)(int, int);

         void (^myBlock)();

 

    2.封装block代码:

       1) ^(int a, int b){

            return a - b;

        };

       2) ^(){

 

            NSLog(@"hello world");

        };

       3)^{

            NSLog(@"hello world");

        }

 3.block访问外面变量

         1)block内部可以访问外面的变量

         2)默认情况下,block内部不能修改外面的局部变量

         3)给局部变量加上__block关键字,这个局部变量就可以在block内部修改

 4.利用typedef定义block类型

         typedef int (^MyBlock)(int, int);

         //以后就可以利用MyBlock这种类型来定义block变量

         MyBlock block;

         MyBlock b1, b2;

        :

         b1 = ^(int a, int b) {

         return a - b;

         };

         

         MyBlock b3 = ^(int a, int b) {

         return a - b;

         };

    5.protocol协议的学习:

         1.协议的定义

         @protocol协议名称 <NSObject>

         //方法声明列表....

         @end

         

         

         2.如何遵守协议

         1>类遵守协议

         @interface类名 :父类名 <协议名称1,协议名称2>

         

         @end

         

         2>协议遵守协议

         @protocol协议名称 <其他协议名称1,其他协议名称2>

         

         @end

         

         3.协议中方法声明的关键字

         1> @required (默认)

        要求实现,如果没有实现,会发出警告

         

         2> @optional

        不要求实现,怎样不会有警告

         

         4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

        类名<协议名称> *变量名;

         id<协议名称>变量名;

         NSObject<MyProtocol> *obj;

         id<MyProtocol> obj2;

         

        如果没有遵守对应的协议,编译器会警告

         

         5.@property中声明的属性也可用做一个遵守协议的限制

         @property (nonatomic, strong)类名<协议名称> *属性名;

         @property (nonatomic, strong) id<协议名称>属性名;

         

         @property (nonatomic, strong) Dog<MyProtocol> *dog;

         @property (nonatomic, strong) id<MyProtocol> dog2;

         

         6.协议可用定义在单独.h文件中,也可用定义在某个类中

         1>如果这个协议只用在某个类中,应该把协议定义在该类中

         

         2>如果这个协议用在很多类中,就应该定义在单独文件中

         

         7.分类可用定义在单独.h.m文件中,也可用定义在原来类中

         1>一般情况下,都是定义在单独文件

         2>定义在原来类中的分类,只要求能看懂语法

下面是我用block写的一段代码:

总结:
因为有了ARC后,省去了很多不必要的代码,但是要明白内存管理的实质,掌握block的使用技巧.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值