OC語言自學《十二》---- OC(block、@property)

1、block    

  • 如何定義block變量
    • int (^sumblock)(int,int)
  • 如何利用block封裝代碼
//有參數,無返回值
^(int a, int b){
     return a + b;
};

//沒有參數,沒有返回值    
^{ 

}
  • block訪問外部變量
    • block內部能夠訪問外部的變量
    • 默認狀況下,block內部不能修改外面的局部變量
    • 給局部變量加上_block關鍵字,這個局部變量就能夠在block內部修改
  • 利用typedef定義block類型

typedef int (^MyBlock)(int,int);
    
    //之後能夠利用Myblock這種類型來定義block變量
    MyBlock sum = ^(int a, int b){

    return a + b;
};

//或者 
MyBlock mb1,mb2;    

mb1 = ^(int a, int b){
    return a + b;
};

2、@protocol協議 

  • 協議的定義
@protocol 協議名稱 <NSObject>

    //方法聲明列表...

@end
  • 如何遵照協議
    • 類遵照協議
@interface 類名 :父類名 <協議名稱1,協議名稱2>

    //方法聲明列表...

@end
  •  協議遵照協議

@protocol 協議名稱 <其餘協議名稱1, 其餘協議名稱2>

    //方法聲明列表...

@end 
  • 協議中方法聲明的關鍵字
    • @required(默認) ----- 要求實現,若是沒有實現,會發出警告,不報錯
    • optional ---- 不要求實現,怎樣都不會有警告
  • 定義一個變量的時候,限制這個變量保存的對象遵照某個協議

//類名<協議名稱> *變量名;
//id<協議名稱> 變量名;
NSObject<MyProtocol> *obj
id<MyProtocol> obj2; 
  • 若是沒有遵照對應的協議,編譯器會發出警告
  • @property中聲明的屬性也可用作一個遵照協議的限制

//@property (nonatomic, strong) 類名<協議名稱> *屬性名;
//@property (nonatomic, strong) id<協議名稱> 屬性名;

@property (nonatomic, strong) Dog<MyProtocol> *dog;
@property (nonatomic, strong) id<MyProtocol> obj;
  • 協議能夠定義在單獨.h文件中,也能夠定義在某個類中
    • 若是這個協議只用在某個類中,應該把協議定義在該類中
    • 若是這個協議用在不少類中,就應該定義在單獨文件中
  • 分類則大部分時候是單獨文件,不與類混
相關文章
相關標籤/搜索