考虑以下应用。当我在调试配置中运行此应用时,textStorage
始终在NSLog()
行非零。
但是,当我在发布配置中运行应用时,textStorage
始终在NSLog()
行 nil 。这是有道理的,因为textStorage
在被分配后未被使用,因此ARC立即释放它(layoutManager
必须保持一个弱的后向引用。)
但为什么应用程序在调试配置中表现出不同的行为?什么是ARC做的不同以及为什么?
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSLayoutManager *layoutManager = nil;
NSTextContainer *textContainer = nil;
NSTextStorage *textStorage = nil;
if (YES) {
textStorage = [[NSTextStorage alloc] initWithString:@"test"];
textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(100, 100)];
layoutManager = [[NSLayoutManager alloc] init];
[layoutManager addTextContainer:textContainer];
[textStorage addLayoutManager:layoutManager];
}
NSLog(@"breakpoint here!");
}
@end