忽略NSArray上的对象 - 内存管理器

Ale*_*hao 2 xcode ios

我想要做的是忽略数组中的所有对象并将其指向另一组对象.像这样的东西:

[myArrayFullOfObjects removeAllObjects];
myArrayFullOfObjects = nil;
NSArray *newArray = [[NSArray alloc] initWithObjects:obj1, obj2, nil];
myArrayFullOfObjects = newArray;
Run Code Online (Sandbox Code Playgroud)

这是对的吗?我希望避免使用旧的对象"myArrayFullOfObjects"指向的内存泄漏.

Osc*_*mez 7

在你的代码这一行:

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将释放先前的值,以便不会发生内存泄漏.