【发布时间】:2012-09-14 03:23:24
【问题描述】:
据我所知,NSString 是“创建一次且只读”的类型。当给 NSString 重新赋值时,我们实际上改变了指针的值,使它指向另一个内存地址,但是 NSString 对象保持不变。
我的问题是:如果 NSString 对象没有其他指针指向它,是否会在重新分配后导致内存泄漏?
详细讨论请阅读以下代码:
@interface ViewController ()
@property (nonatomic,strong) NSString* aString;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.aString = [NSString stringWithFormat:@"Hello %@",@"Philip"];
// only for setting a break point
int x;
// reassigning
self.aString = [NSString stringWithFormat:@"Goodbye"];
// only for setting another break point
int y;
}
@end
在调试控制台中:
(lldb) po self.aString
(NSString *) $0 = 0x00337d00 Hello Philip
(lldb) po self.aString
(NSString *) $1 = 0x3f41dfe0 Goodbye
(lldb)
它清楚地表明,在重新分配值之后,aString 现在指向不同的内存位置。我的另一个问题是:如何在调试控制台中显示以0x00337d00 开头的对象?
【问题讨论】:
-
po 0x00337d00将在该位置打印对象。如果对象被解除分配,可能会崩溃;-) 请注意,某些对象可能不会立即解除分配,而是在清理自动释放池时。在尝试了解保留/释放的工作原理时,您可能会发现 NSZombieEnabled 很有用:)
标签: objective-c nsstring