黑马程序员员—OC(block和protocol)

                                           ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

一、 ARC

     ARC是一种编译器特性:编译时编译器帮助完成代码 ,区分于垃圾回收。
    
ARC判断准则:没有强指针指向对象时,会释放对象。


 1.ARC特点
    1> 不允许调用release、retain、retainCount
    2> 能重写dealloc,但是能调用[super dealloc]
    3> @property的参数
      * strong :成员变量是强指针(适用于OC对象类型)
      * weak :成员变量是弱指针(适用于OC对象类型)
      * assign : 适用于非OC对象类型
   4> 以前的retain改为用strong

 
 2. 指针分为强指针和弱指针
    1> 强指针:默认,所有的指针都为强指针 __strong

    2> 弱指针:__weak

3.使用ARC处理循环引用:

  当两端循环引用的时候,解决的方法:

    1. 使用ARC
       修改@property参数:一端用strong,
一端用weak
     2.非ARC
       修改@property参数: 一端用retain另一端用assign

代码示例:

@class  Dog ;

@interface  Person :NSObject     //  Person 类中

@property (nonatomic , strong) Dog  *dog ;

@end

@class  Person

@interface  Dog :NSObject    //  Dog  类中

@property (nonatomic , weak) Person  *person ;

@end

二、block

1 block简述
       * block是OC特有的一种数据类型,在开发中经常使用。
       * block用来保存一段代码
       * block的标志是^

2  block与函数类似:
     * 可以用来保存代码
     * 并且有返回值
     * 有形参

 3.调用的方式与函数一样

       定义方法如下

int (^sumBlock)(int , int);   //  先对其进行声明

sumBlock = ^(int a , int b )     //  对其赋值
{
             return a + b ;
};

还有另一种写法在声明的同时进行赋值

int (^minusBlock)(int , int) = ^(int a, int b)   //  声明的同时对其赋值
{
         return a - b ;
};

使用 block 进行打印出N条线

//     使用block打印n条线

void (^lineBlock)(int) = ^(int  n)
{
          for (int i = 0 ; i < 0 ; i++)
           {
                    NSLog(@"----------") ;
            }
};
 
lineBlock(6) ;    //    n = 6 , 打印6条横线 



4.用typedef 定义block数据类型

typedef  int (^TaBlock)(int a , int b ) ; //  后面可以使用TaBlock这种类型定义block变量



5.block 定义函数指针

//     指向函数的指针

int  (*p)(int , int ) = sum ;
int  d = p(10, 100);


三、protocol协议


 1.协议的定义

    
@protocol   协议名称 <NSObject>

   //   方法声明列表...

@end  

2 . 协议遵守协议


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

     @end

  

   // 一个协议遵守了另外一个协议,就拥有了另一个协议的所有方法声明

     @interface  Myprotocol <Myprotoco13 , Myprotoco12>

     @end

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

     1> @required (默认)

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

       2>  @optional

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

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

        id <协议名称> 变量名;

NSObject <MyProtocol> *c;

id <MyProtocol> c1;

如果没有协议对应的协议,编译器会报警。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值