- (void)showWeakValue
{
NSString * __weak weakString = [[NSString alloc] initWithFormat:@"First Name: AA"];
NSNumber * __weak weakNum = [[NSNumber alloc] initWithInt:10];
NSLog(@"weakString = %@", weakString);
NSLog(@"weakNum = %@",weakNum);
}输出为
weakString = (null)
weakNum = 10为什么weakNum不为空?因为没有其他对weakNum的强引用,所以应该在赋值后立即释放它。对吗?
发布于 2013-07-12 21:17:15
NSNumber是免费桥接到开源的CFNumber的。从http://www.opensource.apple.com/source/CF/CF-476.19/CFNumber.c中可以看到,NSNumber缓存了创建的对象中介于(-1)和12之间的整数值,因此由
[[NSNumber alloc] initWithInt:10]永远不会释放,并且多个调用返回相同的实例。
为
[[NSNumber alloc] initWithInt:1000]你可能会看到一种不同的行为。
https://stackoverflow.com/questions/17615679
复制相似问题