当我有一个我需要的方法时,往往不方便 为了不同的目的重用相同的局部变量,我倾向于这样做:
NSMutableArray *mutArray = [NSMutableArray arrayWithObjects: @"one", @"two", nil];
[self fooWithArray:mutArray];
mutArray = [NSMutableArray arrayWithObjects: @"three", @"four", nil];
[self barWithArray:mutArray];
//and
MyClass *myClass = [[MyClass alloc]initWithString:@"one"];
self.oneClass = myClass;
[myClass release];
myClass = [[MyClass alloc]initWithString:@"two"];
self.twoClass = myClass;
[myClass release];
记忆方面,这是正确的做法吗? 这段代码容易出现内存泄漏吗?
答案 0 :(得分:1)
在使用变量之前,不必将对象分配给变量。我可以看到这样做的唯一原因是冗长,但这不是必需的。
你可以逃脱:
[self fooWithArray:[NSMutableArray arrayWithObjects: @"one", @"two", nil]];
[self barWithArray:[NSMutableArray arrayWithObjects: @"three", @"four", nil]];
//and
self.oneClass = [[[MyClass alloc]initWithString:@"one"] autorelease];
self.twoClass = [[[MyClass alloc]initWithString:@"two"] autorelease];
答案 1 :(得分:0)
NSMutableArray *mutArray = [NSMutableArray arrayWithObjects: @"one", @"two", nil];
[self fooWithArray:mutArray];
第一个语句返回一个自动释放的对象,因此不释放它们不会导致任何内存泄漏。试图释放实际上会使应用程序崩溃。
MyClass *myClass = [[MyCalss alloc]initWithString:@"one"];
self.oneClass = myClass;
[myClass release]
假设你有一个使用retain属性声明的oneClass,第二行将引用计数增加到2.现在,当您在第三行中释放myClass时,必须注意在方法dealloc中释放oneClass作为[myClass release]
之后引用计数仍为1。
您还可以参考this answer,其中他整齐地描述了内存管理。
答案 2 :(得分:0)
很好的问题。
就内存而言,不会有任何问题,因为你释放分配的内存。但我担心,这不是一个好习惯
你在做什么是这样的:
MyClass *myClass; // in .h
因为您使用了同一个对象两次。