標籤:
一、instancetype和id關鍵字的區別
1)instancetype表示方法的傳回型別和調用方法的物件類型相同。
2)在Object-C引入instancetype之前,初始化方法的傳回型別都是id,id的定義是【指向任意對象的指標(相當於C語言中的void*)】
它們的區別是:instancetype只能用來表示方法傳回型別,但是id還可以用來表示變數和方法參數的類型。
二、在標頭檔中的方法聲明順序
1)這算是一個約定,按照先後順序是:執行個體變數、類方法(靜態方法)、初始化方法、其他方法。
三、產生隨機數的方法—arc4random()
1)使用方法
通過arc4random() 擷取0到x-1之間的整數: int value = arc4random() % x;
擷取1到x之間的整數的代碼如下:int value = (arc4random() % x) + 1;
四、[NBRItem count]: unrecognized selector sent to instance 0x100309120‘下
這個是常見的錯誤,碰到這種錯誤,從字面意思上看是向對象發送了一個不能識別的selector,因此要檢查NBRItem對象是否有count這個方法。
五、弱引用和強引用
1)指標變數指向了某個對象,那麼相應的對象就會多一個擁有者,並且不會被程式釋放,這種指標特性被成為強引用。
2)程式也可以選擇讓指標變數不影響其指向的對象的擁有者個數,這種不會改變對象擁有者個數的指標特性被成為弱引用。常用來解決強引用迴圈的問題,可以先分析出父子關係,然後將父物件保留強引用的特性,然後子物件搞成弱引用特性(__weak),具有弱引用特性的指標指向的對象被釋放後,指標會自動化佈建為nil。
六、屬性的特性
任何屬性都可以有一組特性,用於描述相應存取方法的行為,比如:
@property(nonatomic, readwrite, strong) NSString *itemName
任何屬性都有三個特性
1)多線程特性
nonautomic 和 atomic ,大多數情況下,我們都設定屬性為nonautomar,因為預設是atomic,所以我們要指定為nonautomar。
2)讀寫特性
readwrite和readonly,從字面意思就可以知道,編譯器會為readwrite的屬性產生set和get方法,但是readonly的屬性只有get方法。
3)記憶體管理特性
strong、weak、copy、unsafe_unretained。這些類型決定相應的執行個體變數將如何引用對象。
- 對於不知向任何對象的屬性(int等)不需要記憶體管理,定義為unsafe_unretained,它使非對象屬性的預設值,所以可以不用寫,在引入ARC之前曾經使用assign表示。
- 對於指向OC對象的屬性,四中類型都有可能。預設是strong類型。
- 對於某個屬性指向其他對象的指標,而且該對象的類有可修改的子類(比如:NString/NSMutableString、NsArray/NSMutableArray),應該將屬性設定為copy。對於mutableCopy和copy的區別,見文章【淺copy和深copy】
未完待續。。。
【IOS開發學習—OC篇】