iOS 讓一個(gè)只讀屬性,內(nèi)部支持讀寫(xiě),外部只讀。

大致思路聲明屬性為只讀,但是重寫(xiě)setter賦值方法,具體實(shí)現(xiàn)如下:

import <Foundation/Foundation.h>

@interface Person : NSObject
@property(nonatomic,readonly,copy)NSString * name;//外部只讀屬性
+(id)shareManager;
@end

.m 中重寫(xiě)setter方法
@synthesize name =_name;
-(void)setName:(NSString *)name
{
if (_name!=name) {
[_name release];
[name retain];
_name = name;
}
}
-(void)logRetainCount{
NSLog(@"--%s--%@--%ld",func,self,CFGetRetainCount((__bridge CFTypeRef)(self)));
}
+(id)shareManager{
Person * person = [[Person alloc] init];
[person logRetainCount];
person.name = @"123";
[person test];
return person;
}
-(void)test{
self.name = @"123124";
}
由于類(lèi)是使用MRC 創(chuàng)建的 所以setter方法 里面出現(xiàn)了 retain 以及 release
編譯發(fā)現(xiàn) 正常能在類(lèi)內(nèi)部修改 屬性

但是在外部創(chuàng)建時(shí)候 使用:
Person * person = [Person shareManager];
person.name = @"123";
會(huì)出現(xiàn)警告 name為只讀屬性。

當(dāng)然使用KVC賦值可以。

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

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