在項目里看到同事使用類目方便的持久化用戶信息,使用會很方便婶肩。
具體一點眉反,登錄以后返回的用戶基本信息鹊碍,大多數(shù)情況下都是需要存儲的。
目前項目里胡桃,為NSObject添加了一個類目踩叭,.h文件中用@property聲明屬性,.m中用NSUserdefault重寫getter和setter方法标捺“媚桑看到這樣的設(shè)計,使用起來很方便亡容,object直接就可以點到嗤疯。今天仔細研究了一下,發(fā)現(xiàn)一些問題闺兢。我在.h中@property聲明了屬性茂缚,在.m中同時重寫setter和getter方法。用變量前加下劃線去賦值和取值的時候報錯了屋谭。經(jīng)過一番折騰脚囊,最后從網(wǎng)上找到了解決問題的方法和原因。
解決辦法就是注釋的那行代碼桐磁。
具體解釋如下:因為@property聲明的屬性會自動給該屬性生成setter和getter方法悔耘,當(dāng)我們自己同時重寫setter和getter方法的時候,系統(tǒng)就不會自動生成該屬性的setter和getter方法了我擂。自然不會生成下劃線開頭+變量名的變量了衬以,所以是不會識別的;
補充:_變量名去取值訪問的是內(nèi)存校摩,而self.變量名是發(fā)消息看峻,使用的是getter。
iOS5之前(可能是這樣衙吩,因為我沒有接觸過那個時代互妓,只是從網(wǎng)上找到的資料顯示),聲明屬性需要 :
1、在.h中@property 類型 變量名冯勉;
2澈蚌、在.h中聲明setter和getter方法;
3珠闰、在.m中@sythesize并實現(xiàn)setter和getter方法惜浅;
現(xiàn)在簡化為@property(原子性瘫辩,語義)類型 變量名伏嗜;這樣系統(tǒng)會自動的為你生成一個_變量名的一個變量,與setter和getter方法伐厌。