iOS Objective-C為什么屬性(property)同時重寫setter、getter方法會報錯?

問題

? ? 在開發(fā)當(dāng)中,遇到定義了一個屬性,需要同時重構(gòu)它的setter、getter方法,有的時候會報錯,上代碼:

@interface SetterGetterClass : NSObject

@property(nonatomic,strong)NSString *developername;

@end

? ? 這個是聲明的屬性,下面是實(shí)現(xiàn)setter、getter方法以后報錯的圖片:

- (void)setDevelopername:(NSString *)developername {

????_developername = developername;

}

- (NSString *)developername{

????return _developername;

}

setter、getter

錯誤信息

? ? 沒有聲明的標(biāo)識符的使用,意思就是_developername沒有被聲明,找不到該變量,那么問題來了,為什么找不到該變量,明明已經(jīng)property一個成員屬性了。

property具體的作用:

@property(nonatomic,copy)NSString *developername;

? ? 1.property是定義屬性,不是成員變量,聲明了setter、getter方法;

????在新的xocde的環(huán)境下,不加@synthesize會自動生成私有的帶下劃線的的成員變量、該變量的setter、getter方法 也就是這個屬性的變量 = _developername并可以用setter、getter外部訪問,因此子類、類外不可以直接訪問,可以通過setter、getter方法進(jìn)行訪問;

? ? 2.property方便了內(nèi)存的管理,屬性修飾的關(guān)鍵字,strong、weak、copy等等,不同的關(guān)鍵字代表的含義,以及生成的setter、getter方法也是不同的 詳情??;

分析

? ??當(dāng)用戶重寫了setter、getter方法,那么系統(tǒng)也就不會自動生成私有的帶下劃線的的成員變量,也就是說為什么沒有找到_developername這個(變量)標(biāo)識了。

正確的操作姿勢

? ? 添加@synthesize,生成setter、getter方法指定該屬性的變量名為_developername,問題得到解決。

@synthesize developername = _developername;

? ? 上述代碼代表了聲明了一個新的屬性developername, 又聲明一個變量_developername,然后用@synthesize實(shí)現(xiàn)了developername的存取方法,也就是setter、getter方法;而developername = _developername的含義代表著,屬性develoeprname這個屬性作用的變量是_developername;

思維發(fā)散:

????當(dāng)用戶在使用上述的屬性變量進(jìn)行操作的時候:

self.developername = @"測試2";

_developername = @"測試3";

NSLog(@"self.developername :%@",self.developername);

NSLog(@"_developername :%@",_developername);

? ? 當(dāng)用戶使用點(diǎn)語法self.developername的屬性會直接調(diào)用自己重寫的setter、getter方法進(jìn)行訪問,使用_developername變量的時候只是簡單的賦值的操作。因此子類、類外不可以直接訪問;

總結(jié)

? ? 1.property不是變量是屬性。

? ? 2.property會自動生成setter、getter方法,以及屬性中作用的下劃線的變量。

? ? 3.@synthesize developername = _developername; ?指定屬性作用變量的變量名稱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容