標籤:property 編譯器 super arc
強指標:預設情況下所有的指標都
是強指標型(strong) 在Arc當中
,一個對象只要沒有強指標引用,
那麼它就會被系統回收
弱指標:弱指標不影響對象的回收
在Arc當中,所有的跟手動管理記憶體
相關的方法都不能調用比如說
dealloc不能重寫父類 了(不能
super dealloc)
//__weak定義一個弱指標
__weak Person * p2 = p//弱指標
不影響對象
//強指標引用使用OC物件類型,
@property (nonatomic,strong)
我們用別人的項目有可能用的是非
arc的項目
-fno-objc-arc
-f-objc-arc
第三方架構:就是別人寫的項目,
我們要用,如果他是非arc機制,給
編譯器加一個參數-fno-objc-arc就
是告訴編譯器這個檔案就是非Arc機
制的,這樣就不會報錯了,並且非
arc手動記憶體管理的方法都能夠正常
調用 了,在非arc項目中引入 arc機
制的檔案,給編譯器加一個參數 -
f-bojc-arc,就是告訴編譯器這個文
件是arc機制的
edit->refactor-convert to
arc循環參考問題
arc機制中如果出現了循環參考問題
, 只需要把其中引用一方變成,
weak弱指標既可解決問題
block類型
int bool char float double
NSObject * id sel
他們的共同特點就是能夠定義成變
量
1.int a = 0;
BOOL b = YES;
2.當做函數,和方法的參數的傳遞
(void) test(int) a
block:是oc中比較特殊的資料類型
,它用來封裝一段代碼,並且可以
把這段代碼當做參數傳遞
1.通過{}來封裝代碼
1.void test():傳回值為空白,並且沒
有參數{}
^{};
2.int test();有傳回值,還有一個參
數
^{return 10;}
3.int test(int a);有傳回值,還有一
個參數
^(int a){return a + 1}
4.int test(int a,int b)有傳回值,有
多個參數
1.定義一個傳回值為空白,並且沒有
參數的block變數
void (^myblock)() = ^{};
2.定義一個有傳回值的,並且沒有
參數的block變數
int (^myblock)() = ^{return
10;};
3.定義一個有傳回值,並且有一個
參數的block變數
int (^myblock)(int a) = ^(int
a){return a + 1};
4.定義一個有傳回值,並且有多個
參數的block變數
int (^myblock) (int a,int b) =
^(int a,int b){return a + b}
block好處就是,我定義block的人
本身可以不關心
//block內部演算法的實現
//誰調用有block參數的方法,誰就
給我實現block內部演算法
協議
協議就是用來聲明方法
@protocol Myprotocol
- (void)test;
@end
在.m中實現協議中的方法
@required表示以下方法必須實現
- (void) test1;
@optional 表示可選實現
- (void)test2;
可選的就不會在遵守協議的那個類
裡面顯示
但是,required就會提示你必須實
現
協議本身他可以遵循其他的協議
協議可以遵循多個
基協議
協議就是用來聲明方法的
@protocol Myprotocol
<NSObject>
內部聲明方法
@end
協議內方法的約束
@required必須實現的方法
@optional 選擇實現
預設的方法就是 必須實現的
讓某個類遵循協議只需要在類繼承
後面 <協議名字>
類可以遵循多個協議<協議名,協議
名,協議名>
協議本身也可以遵循其他協議<協議
名字>
協議當中不可以聲明成員變數
子類繼承了父類,同樣也會繼承父
類遵循的協議
NSObject * obj = [[NSObject]
init];
id obj2= [[NSObject alloc] init];
//定義OC物件變數時,可以給他加
一個協議約束
Person<Myprotocol> *p =
[[Person alloc] init];
@property (nonatomic,strong)
Car<Myprotocol2> * car;
//如果你要限定某個對象,一定要實
現某個協議,那麼我們一般用
id<Myprotocol2>obj 去定義
@property (nonatomic,strong)id
<Myprotocol2> obj;
//與@class功能一樣,就是告訴類
,MyProtocol是一個協議
@protocol MyProtocol;
把協議聲明到 一個類的.h檔案中,
其他類繼承之外,沒辦法去遵循這
個協議了
單獨把協議定義成一個.h,任意類
都可以遵循這個協議,
本文出自 “言十年” 部落格,請務必保留此出處http://yanshinian.blog.51cto.com/8275527/1564567
ios黑馬程式員--ARC