回答
self.propertyName
如果指定了propertyName
在財產申報保留
propertyName的,不會增加保留計數的可能會導致應用程序崩潰的一個適當增加保留計數。
e。 G。 ,
@property (nonatomic,retain) NSString* propertyName;
可以說你有nameProperty
的NSString對象。 下面增加保留計數1,你可以使用self.propertyName並調用release
。
self.propertyName = nameProperty;
[nameProperty release];
下面一點兒也不增加保留計數,所以如果你在你的應用程序中使用propertyName的它會導致應用程序崩潰的。
propertyName = nameProperty;
[nameProperty release];
propertyName
的進一步使用將導致崩潰。
它不爲非對象類型,如'BOOL'或'NSInteger'或'CGFloat'等做任何內存管理。 – Abizern
@ Abizern:爲什麼downvote?不是一個有效的理由,仔細閱讀答案我給了NSObject的例子與財產中的保留,它也被接受:(只要問自己的重要性,保留'基本類型... – Jhaliya
因爲你已經回答了一個特定的案例,而不是全部的情況,不僅僅是保留一個對象,還有更多的不同 - 對retainCount的引用是誤導性的,不要想到對象的保留計數,只是擔心釋放你擁有的對象。如果你傳入的對象是一個靜態字符串呢?它的'retainCount'沒有增加,但是它已被保留。 – Abizern
self.propertyName
是發送對象的消息,要求它爲propertyName
值,這意味着它可能會經歷一個getter/setter方法等propertyName
直接訪問伊娃,繞過任何getter/setter。 Here's an article進入它更詳細。
自我。通過你的可能合成訪問方法運行,如果您使用性能
即self.propertyName =了newName是一樣的[自setPropertyName方法:了newName]
這將成爲存儲管理的重要的參數propertyName =了newName會導致你鬆散引用propertyName的前一個內容
點符號轉換爲編譯器調用的方法。這意味着在運行時會有額外的工作來執行此方法調用,例如從堆棧內存中複製某些內容並執行機器代碼跳轉。
實例變量本身更快,因爲它本質上只是一個內存地址或標量值(如int)。
當你想要或需要一個額外的圖層去做某件事時,你會更喜歡self.something符號。就像保留傳入的對象或者第一次懶惰地實例化對象。
設置屬性的值就是這樣 - 它直接設置屬性的值,而不通過任何訪問器或合成訪問器。
通過調用訪問器通過self
您正在訪問訪問器。對於已使用retain
或copy
聲明的屬性,將傳入的值爲retain
或copy
。對於非客觀性屬性,通常聲明爲assign
,這意味着沒有應用於這些iVar的內存管理。
您可以看到兩種類型的呼叫 - 但在初始化程序和dealloc
方法中優先使用直接方法,因爲在這些方法中不鼓勵對self
的呼叫。
如果您聲明併合成了該屬性,則對self
的調用還會爲該變量中的更改生成KVO通知。這節省了您不得不編寫willChangeValueForKey:
和didChangeValueForKey:
方法。
- 1. 通過「propertyname」訪問屬性與objective-c中的「self.propertyname」之間的區別?
- 2. 繼承與類別有什麼區別
- 3. Settings.Default。[PropertyName],Settings.Default.Properties和Settings.Default.PropertyValues之間的區別是什麼?
- 4. 有什麼區別
- 5. 有什麼區別
- 6. 有什麼區別?
- 7. 有什麼區別?
- 8. 有什麼區別?
- 9. 有什麼區別
- 10. ....有什麼區別?
- 11. 有什麼區別?
- 12. 有什麼區別
- 13. 有什麼區別
- 14. 有什麼區別
- 15. 有什麼區別?
- 16. 有什麼區別`和$(Bash中有什麼區別?
- 17. 與%i和%li有什麼區別?
- 18. Gateway與Service Activator有什麼區別?
- 19. ldapAuthentication與inMemoryAuthentication有什麼區別?
- 20. float x []與float [] x有什麼區別?
- 21. Copy與Clone有什麼區別?
- 22. 錯誤與異常有什麼區別?
- 23. Tableau與Pentaho:有什麼區別?
- 24. process.cwd()與__dirname有什麼區別?
- 25. DesiredCapabilities與RequiredCapabilities之間有什麼區別?
- 26. Rack與Passenger有什麼區別?
- 27. 返回與否有什麼區別?
- 28. AJAX與JavaScript和jQuery有什麼區別?
- 29. Console.WriteLine()與Debug.WriteLine()之間有什麼區別?
- 30. Restharp與Restsharp.net2有什麼區別
搜索功能是否被破壞?這已經被問及已經回答了幾十次了。看看這裏的相關帖子-------> – Roger
@roger,試着在提問問題頁面粘貼相同的標題和問題,你會發現自己。 :) – necixy
..好吧,它看起來並不破碎;-) – Roger