MacDev 板


LINE

※ 引述《yeah200077 (爹卡路洽)》之铭言: : 常常看别人的Code会看到这种写法出现 : h档: : NSString* _str; : property(nonatomic,copy) NSString* str; : m档: : @synthesize _str = str; : [_str release]; : 我想问的为什麽要另外宣告str assign给 _str有什麽意义? : 我直接写成 : property(nonatomic,copy) NSString* _str; : @synthesize _str; : 好像也行,不懂为什麽会这样写 通常 // .h @interface Foo{ NSString *_str; // 其实这行可以不用宣告 } @property (nonatomic, copy) NSString *str; @end // .m @implementation Foo @synthesize str = _str; @end --------------- @synthesize指令会帮你匹配instance variable(ivar) 如果@interface没有宣告该ivar 则会自动帮你「合成」 另外也会帮你「合成」accessor的method @property事实上只是帮你宣告accessor的method 另外也可以使用dot syntax来使用accessor accessor因为是method,所以必须通过message来传递,例如: [self setStr:aString]; aString = [self str]; 或 self.str = aString; aString = self.str; 至於为何要把ivar前面加上底线"_" 是因为要区别其他method的parameters 例如: - (void) saveString:(NSString*)str{ _str = [str copy]; //也可以直接用self.str = str; } 这样parameter就不会跟ivar相冲 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.30.67.74
1F:→ reon:所以@synthesize str = _str 其实就等於说用 05/01 15:56
@synthesize str 和 @synthesize str = _str 的差别, 只在於ivar是否要指定为其他名称 把私有的ivar用底线开头 比较好区分而已 如果你不指定ivar的名称 则会自动用accessor的名称来当做ivar的命名
2F:→ reon:_str 去取代 self.str 这样罗? 05/01 15:57
3F:→ reon:就不再需要透过dot syntax这样吗@@ 05/01 15:58
_str是instance variable (private by default) dot syntax是property/accessor/message (public) 两者是截然不同的... 在get的时候你用ivar或是getter通常是没有差 (只差在getter因为是message 速度会慢一点点) 但是set的时候 setter会根据你property的设定来决定是否retain或copy(而且是message) 但是用ivar做设定,就要自己手动管理记忆体 不过我不是很确定在ARC开启的情况下 直接用ivar设定是否会帮你retain? (理论上应该要是会) ※ 编辑: leondemon 来自: 119.77.246.75 (05/01 16:28)
4F:→ leondemon:property在许多Obc-C的书和官方文件都讲的很清楚 05/01 16:31
5F:→ reon:这样比较清楚了 =_str 目的原来只是别名.. 05/02 23:44
6F:→ reon:@property和synthesize 基本上我是很明白 只是一直没去了解 05/02 23:46
7F:→ reon:=_str 这个意义为何...感谢分享:D 05/02 23:46
8F:→ reon:不过倒是感觉这功能似乎有点鸡助@@"... 05/03 00:07
9F:→ Killercat:你可以想成是在.m里面的alias 05/04 00:04
10F:→ Killercat:在.h里面 式open的公开的 所以要写得很清楚(也许很长) 05/04 00:04
11F:→ Killercat:但是.m里面的alias你爱怎麽取就怎麽取(至少我是这样用) 05/04 00:05







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP