作者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