1
lcl22hope OP 原来是不应该用NSString来做实验,但确实网上好多帖子都是用NSString来举例的啊,很怀疑他们自己都测没测过,自己写的东西。
// Do any additional setup after loading the view, typically from a nib. NSObject* test = [[NSObject alloc] init]; NSObject __unsafe_unretained *c = test; NSObject __weak *d = test; test = nil; NSLog(@"%@",[c description]);//bad access NSLog(@"%@",[d description]);//d 已经是nil |
2
lcl22hope OP 但是问题来了,为什么NSString不行呢?求指教
|
4
likid 2014-08-28 09:16:40 +08:00 1
编译器会对 NSString 做优化,NSString Class 方法生成的变量会被存储在某个地方(具体忘了在哪里),所以不会被立即释放。
另,这种问题不应该来这么问吧。Stackoverflow 更好 |
7
dopcn 2014-08-28 09:38:30 +08:00 1
@likid
我看过的是说 NSString 的常量@"test"因为编译器的优化不会立刻释放 而[NSString stringWithFormat:@"test1"]; 等价于 [[[NSString alloc] initWithString:@"test1"] autorelease]; 这种情况下必须等到 autoreleasepool 干掉才会释放 总之用 NSString 做这个确实不合适 |
8
66450146 2014-08-28 10:11:55 +08:00 1
String literals are optimized that they can be saved in a static memory area that won't be changed.
记住字符串常量的特殊性就好了,从 c-string 到 NSString 都是这样,字符串常量因为使用广泛而且优化效果明显(静态内存区),基本上所有的编译器都会去做这个工作。 |