NSString重新分配值导致内存泄漏?

时间:2012-09-14 03:23:24

标签: objective-c nsstring

据我所知,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开头的对象?

2 个答案:

答案 0 :(得分:0)

因为这样强,它取代了ARC中的retain属性。使用assign和check

@property (nonatomic,assign) NSString* aString;

答案 1 :(得分:0)

如果NSString没有指向它的指针,它应该被dealloc&ed; ed。这可能只发生在考虑自动释放池之后,因为它是使用应该返回自动释放的方法创建的。

@"string"这样的文字NSStrings也从来没有得到dealloc,因为它们实际上是常量(有点像单身)。