只是注意,你連接的代碼是在我看來不好的做法,因爲他們應該在頭一個只讀屬性,然後就重新聲明其作爲類擴展不只讀。
這一邊:
- 是它通常把性能的.m文件,即使它裏面寫@interface(這對我來說是屬於.h文件)?
如果在頭一個只讀屬性,並要添加一個setter方法在實現文件中,供內部使用,那麼你可以重新聲明屬性的一類延伸和setter方法是爲你創造。因此,你不必自己編寫二傳手。
在你的情況,程序員有一個屬性與getter和setter,但只想公開暴露getter方法。
- 爲什麼有一個未實現的存取方法(或者是別的什麼?)。 @property自動創建訪問器方法,所以這似乎是無用的。只是爲了讓人能評論該方法嗎?
訪問器方法實際上並未實現,它只是自動創建的。 @property聲明與最新版本的LLVM一起經歷一個稱爲自動合成的過程。這種自動合成將查看@property聲明併爲其生成相應的setter和accessor方法。
程序員只是想公開暴露getter方法,這就是爲什麼他們把它放在公共類接口。
下面是自動生成的getter和setter方法的一個例子:
@interface MyClass()
@property (nonatomic) int integerOne;
@property (nonatomic, readonly) int integerTwo;
@property (nonatomic, readonly, getter = myIntegerThree) int integerThree;
@end
什麼,這些將做如下:
integerOne:生成名爲_integerOne
的實例變量,創建一個名爲integerOne
getter方法和創建名爲setIntegerOne:
的設置器方法
integerTwo:生成名爲_integerTwo
的實例變量,創建一個名爲integerTwo
integerThree getter方法:生成一個名爲_integerThree
的實例變量,創建一個名爲getter方法myIntegerThree
您可以通過只實現自動生成的方法避免了autosynthesis 。如果你實現了所有的自動生成方法,你也必須自己綜合實例變量。例如,如果我聲明只讀屬性,然後重寫自動創建的獲取器,則必須將@synthesize property=_property;
置於實現文件的頂部,以便我可以獲取名爲_property
的實例變量。