我想要做的是忽略数组中的所有对象并将其指向另一组对象.像这样的东西:
[myArrayFullOfObjects removeAllObjects];
myArrayFullOfObjects = nil;
NSArray *newArray = [[NSArray alloc] initWithObjects:obj1, obj2, nil];
myArrayFullOfObjects = newArray;
Run Code Online (Sandbox Code Playgroud)
这是对的吗?我希望避免使用旧的对象"myArrayFullOfObjects"指向的内存泄漏.
在你的代码这一行:
myArrayFullOfObjects = nil;
Run Code Online (Sandbox Code Playgroud)
会导致内存泄漏,因为你将不再有一个指向该数组的指针,因此它永远不会被释放,所以你可以这样做:
[myArrayFullOfObjects release];
myArrayFullOfObjects = nil;
Run Code Online (Sandbox Code Playgroud)
要么
您可以将newArray声明为如下属性:
.h文件
@property(nonatomic, retain) NSArray *newArray;
Run Code Online (Sandbox Code Playgroud)
.m文件
@synthesize newArray;
Run Code Online (Sandbox Code Playgroud)
然后简单地做:
self.newArray = [NSArray arrayWithObjects:obj1, obj2, nil];
//Note that arrayWithObjects returns and autoreleased object, however the property setter will send it a retain message, so it will end up with a retain count of 1.
Run Code Online (Sandbox Code Playgroud)
正如bshirley所提到的,如果您不使用ARC,如果您使用ARC,则不必担心这一点.
生成的setter将释放先前的值,以便不会发生内存泄漏.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |