我的代码中有这个:
NSString *myString = @"";
....
if (...) {
myString = @" other string";
}
...
myString = @" an other string ";
这是泄漏吗?
答案 0 :(得分:4)
对不起,伙计们,但这不是自动释放的。它没有泄露,但它没有自动释放。这段代码证明了这一点:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"First one"; //
NSString *str2 = [NSString stringWithFormat:@"The %dnd", 2]; // this autoreleasing string
[pool drain];
NSLog(@"%@", str1); // All's ok
NSLog(@"%@", str2); // EXC_BAD_ACCESS
在Strings PRogramming Guide处了解使用@"..."
构造创建的字符串:
编译器生成这样的对象 每个模块上唯一的常量 基础,他们永远不会被解除分配, 虽然你可以保留并释放它们 当你做任何其他对象时。
答案 1 :(得分:2)
这不是泄漏,autorelease
答案 2 :(得分:1)
这不是泄漏。只有在分配内存且不释放内存时,才会泄漏内存。
在您的情况下,您创建的是一个自动释放的对象。它们将在稍后发布。
答案 3 :(得分:1)
通过使用alloc init
或new
,retain
或mutablecopy
方法分配对象并随后不释放它们来获取对象的所有权时,会泄漏内存。然后它会导致泄漏。看看Object Ownership
您拥有自己创建的任何对象。
使用名称以“alloc”开头的方法“创建”对象, “新”,“复制”或“mutableCopy”(for 例如,alloc,newObject或 mutableCopy)。
您可以使用retain来获取对象的所有权。
请记住,对象可能有多个所有者。取得所有权 一个对象是你的说法 你需要它来保持活力。 (这在下面有更详细的讨论 “访问者方法。”)
完成后,您必须放弃您拥有的对象的所有权 和他们一起。
您通过向对象发送释放消息来放弃对象的所有权 或自动释放消息(自动释放 将在下面详细讨论 “自动释放”)。在Cocoa术语中, 放弃对象的所有权 因此通常被称为 “释放”一个物体。
您不得放弃您不拥有的物品的所有权。
这主要是以前政策的隐含推论 规则,明确。