作者BBSealion (海狮)
看板MacDev
标题[问题] 有关property里的strong & weak
时间Sun Aug 26 11:06:42 2012
最近刚开始学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: 114.25.17.148
※ 编辑: BBSealion 来自: 114.25.17.148 (08/26 11:07)
1F:推 RiddleApple:self.sStr1 = @"test!" 会产生一个字串常数, 08/26 16:00
2F:→ RiddleApple:这个字串常数应该会到程式结束时才会被释放掉。 08/26 16:01
3F:→ RiddleApple:你可以把 self.sStr1 = @"test!" 这行改成: 08/26 16:22
4F:→ RiddleApple:self.str1=[[NSString alloc]initWithFormat:@"test"] 08/26 16:23
5F:→ RiddleApple:更正:是self.sStr1 08/26 16:24
6F:→ RiddleApple:不过改成这样依然会印出test 08/26 16:25
7F:→ RiddleApple:,因为这个方式产生出来的字串物件retainCount会加2 08/26 16:27
8F:→ BBSealion:有耶 我试过用init的方法 他还会警告这样多此一举 08/26 20:57
9F:→ BBSealion:然後依然看不出strong和weak的差别 08/26 20:57
10F:→ BBSealion:所以怎样才能造出 看出两者差别的例子呢? 08/26 20:57