对象释放期间的问题

时间:2010-11-23 05:14:08

标签: objective-c object release-management

我在什么时候和哪个对象要发布时遇到了一些问题

你可以说我对此的了解较少

我有以下条件,请相应地建议我

  • 情况-1

NSMutableString * str = [[NSMutableString alloc] initWithFormat:@“Hello World!”];
NSMutableArray * array = [[NSMutableArray alloc] init];
[array addObject:str];

现在,当我试图释放str时,将来影响阵列的使用......以及副Versa 告诉我,我可以同时发布吗?

  • 情况-2

NSMutableString * str = [[NSMutableString alloc] init]; str = @“Hello World!”;
str = [self getData]; //调用返回字符串的方法
[str release];

我想我在这里创建一个内存泄漏(如何解决?)

请清除这些情况

2 个答案:

答案 0 :(得分:2)

在第一种情况下,您需要在将其添加到数组后调用[str release];,如下所示:

NSMutableString *str = [[NSMutableString alloc] initWithString:@"Hello World!"];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:str];
[str release];

这样,array保持对字符串的唯一保留调用。稍后释放array后,您将不会遇到任何内存泄漏问题。

我对第二种情况有点困惑。 str这里是一个指针。您似乎将三个不同的对象分配给同一个指针:

NSMutableString *str = [[NSMutableString alloc] init]; //first object
str=@"Hello World !"; //second object
str=[self getData]; //third object

当您调用[str release]时,您已经创建了内存泄漏,因为您丢失了第一个可变字符串。第二次调用str =时,您无法访问第一个NSMutableString

假设您正在寻求连接所有这些(因为您选择了NSMutableString),您可以尝试这样做:

NSMutableString *str = [[NSMutableString alloc] init]; //first object
[str appendString:@"Hello World!"];
[str appendString:[self getData]];
[str release];

如果[self getData]方法返回一个自动释放的字符串,你会没事的。如果getData返回保留字符串(如果您使用allocinit),则需要将其分配给中间指针,并在将其添加到str后将其释放

答案 1 :(得分:0)

创建NSMutableString的必要性您可以直接使用NSString