【发布时间】:2012-06-19 19:09:46
【问题描述】:
我编写了以下示例代码来了解 ARC 的工作原理
@property (nonatomic, weak) NSString *myString;
@property (nonatomic, weak) NSObject *myObj;
@end
@implementation ViewController
@synthesize myString = _myString;
@synthesize myObj = _myObj;
- (void) viewDidAppear:(BOOL)animated
{
NSLog(@"Appearing Obj: !%@!",self.myObj);
NSLog(@"Appearing String: !%@!",self.myString);
}
- (void)viewDidLoad
{
self.myObj = [[NSObject alloc] init];
self.myString = [[NSString alloc] init];
NSLog(@"Loading Obj %@",self.myObj);
NSLog(@"Loading String: !%@!",self.myString);
}
但令人惊讶的是,我得到了这些结果:
2012-06-19 15:08:22.516 TESTER[4041:f803] Loading Obj (null)
2012-06-19 15:08:22.517 TESTER[4041:f803] Loading String: !!
2012-06-19 15:08:22.533 TESTER[4041:f803] Appearing Obj: !(null)!
2012-06-19 15:08:22.535 TESTER[4041:f803] Appearing String: !!
如您所见,Obj 已正确释放,但我的字符串(这也是一个弱属性)没有打印出 null...为什么不呢?
【问题讨论】:
-
您在
myString中设置的字符串是否是字符串文字(类似于@"Hello world!")?
标签: iphone objective-c ios automatic-ref-counting