【IOS開發學習—OC篇】

來源:互聯網
上載者:User

標籤:

一、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篇】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.