MacDev 板


LINE

SWTest.h 多一个 method @interface SWTest : NSObject @property (strong) NSString *sStr1; @property (weak) NSString *wStr2; -(void) applicationTest1; -(void) applicationTest2; @end 把 SWTest.m 改成如下 -(void) applicationTest1{ self.sStr1 = [NSString stringWithFormat:@"test"]; // 不要直接用 @"test",这个物件的行为和一般行为不太一样。 self.wStr2 = self.sStr1; self.sStr1 = nil; NSLog(@"%@ in Test1", self.sStr1); NSLog(@"%@ in Test1", self.wStr2); // 预期会出现null,但结果还是出现 test! } -(void) applicationTest2{ NSLog(@"%@ in Test2", self.sStr1); NSLog(@"%@ in Test2", self.wStr2); } 然後 main.m 改成如下 int main(int argc, const char * argv[]){ @autoreleasepool{ SWTest *swtest = [[SWTest alloc] init ]; @autoreleasepool { [swtest applicationTest1]; } [swtest applicationTest2]; } } 这样一来在 applicationTest2 的 self.wStr2 就是 null 了 如果把 wStr2 改成 strong ,就不会出现 null 可以这样解说 ivar 的 weak 是 ARC 自动加到 autorelease pool 而在 BBSealion 的例子中,只有一个 main() 里的 autorelease pool 所以要自行加一个才会看到差异 那在写 iOS的App 情况下呢? 是很容易遇到 autorelease pool 把里面的物件清掉的情况 所以要认为被加到 autorelease pool 的物件在 method 结束就不能用了 这样比较保险。 ※ 引述《BBSealion (海狮)》之铭言: : 最近刚开始学Obj-C : 爬了一下文&好像都没看到有讨论? : 但这问题困扰我好久...一直搞不清楚strong和weak的性质 : 期望有高手能解惑一下 (能有实例更好QQ) : 目前看到解释是,拿weak指标去指物件 (一个被其他strong指标指着的物件) : 如果指住这物件的其他strong指标都移走的话,这个weak指标也会释放掉那个物件 : 所以我尝试做一个简单例子如下: (但没有效果,应该是我理解错误orz) : SWTest.h : @interface SWTest:NSObject : @property (strong) NSString *sStr1; : @property (weak) NSString *wStr2; : -(void) applicaionTest; : @end : SWTest.m : #import "SWTest.h" : @implemetation SWTest : @synthesize sStr1, wStr2; : -(void) applicationTest{ : self.sStr1 = @"test!"; : self.wStr2 = self.sStr1; : self.sStr1 = nil; : NSLog(@"%@", self.wStr2); // 预期会出现null,但结果还是出现 test! : } : @end : main.m : int main(int argc, const char * argv[]){ : @autoreleasepool{ : SWTest *swtest = [[SWTest alloc] init ]; : [swtest applicationTest]; : } : } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.85.196.183
1F:推 BBSealion:感谢! 这例子可以成功 不过是说没有碰到autoreleasepool 08/27 09:34
2F:→ BBSealion:的状况下 weak和strong就没甚麽差吗? 08/27 09:35
3F:→ BBSealion:另外是为什麽一定要用stringWithFormat啊? 08/27 09:36
4F:→ BBSealion:直接写不是比较直观的做法吗? 但反而就让w&s没差了?? 08/27 09:37
5F:→ BBSealion:目前我的认知 直接写就=[NSString alloc]initWithString 08/27 09:38
6F:→ offname:在写一个iOS或是Mac程式的时候,碰到autorelease 机会很大 08/27 09:58
7F:→ offname:或说上面的例全用 local variable 。就会看出来差别了 08/27 09:59
8F:→ offname:关掉 ARC 把 @"test" 的retainCount 秀出来是一个很大的数 08/27 14:50
9F:→ offname:alloc後retainCount 一开始要是 1,才会符合书上说的表现 08/27 14:51
10F:推 BBSealion:恩... 用local似乎可以理解。 retain值很大的设计好怪? 08/28 09:43
11F:→ BBSealion:初学还没遇到实际状况 不过观念上大概懂了 感谢o大~ 08/28 09:44
12F:推 Blueshiva:因为@""的设计是一个const,但是它又是一个物件,一样会 08/28 09:56
13F:→ Blueshiva:有retain count,为了避免不小心把它release掉了,所以 08/28 09:56
14F:→ Blueshiva:才会塞个很大的retain count进去 08/28 09:57







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

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

TOP