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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP