【发布时间】:2017-05-27 11:31:14
【问题描述】:
最近我注意到 Xcode 中 Objective C 内存管理的奇怪行为。 代码如下:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *firstString = [[NSString alloc] initWithString: @"Hello"];
NSString *secondString = firstString;
[firstString release];
NSLog(@"%@", secondString);
}
return 0;
}
我认为,释放 firstString 后 secondString 指向 nil 并且 NSLog 应该会产生错误。 但是此代码不会产生任何错误并成功打印“Hello”字符串。 我用这样的命令手动编译和运行代码,也没有发现任何错误:
% clang -framework Foundation -fno-objc-arc main.m && ./a.out
我尝试使用在线 Objective-C 编译器 (GCC) (http://rextester.com/l/objectivec_online_compiler) 编译此代码,但出现错误。 我究竟做错了什么? ARC 支持在 Xcode 中被关闭。 提前致谢。
【问题讨论】:
标签: ios objective-c xcode clang