嗨我很困惑如何释放已经没有存储指针来自头文件的aclloc类。在循环之后,我丢失了指向类的指针,因为它具有所有相同的实例名称。
for(i=0;i<20;i++){
MyClass *class = [[MyClass init]alloc];
class.count = i;
[classArray addObject:class];
[self addToScene:class];
}
我理解内存分配和保留的基本概念,但由于我使用cocos2d编程,我不确定错误的原因来自Object-c或cocos2d。所以我想对object-c中的处理内存做一个清晰的想法。帮助我: - )
答案 0 :(得分:1)
Præ-scriptum:应该交换alloc和init调用(先分配,然后再初始化)。
你必须在循环中释放它们 - 将它们添加到数组中会保留它们。
for(i = 0;i < 20; i++) {
MyClass *obj = [[MyClass alloc] init];
obj.count = i;
[classArray addObject:obj];
[obj addToScene:obj];
[obj release];
}
答案 1 :(得分:0)
如果我理解正确,请将对象存储在NSArray
中并释放它们。完成对象后,释放数组。这是实现它的一种方式。
答案 2 :(得分:0)
数组保留了自己的内容,所以你必须确保不保留它:
// Simpler
{
MyClass *c = [[[MyClass alloc] init] autorelease];
⋮
}
或:
// Less memory
{
MyClass *c = [[MyClass alloc] init];
⋮
[c release];
}
甚至:
// Rely on ARC (simpler and less memory).
{
MyClass *c = [[MyClass alloc] init];
⋮
}
编辑:感谢@ H2CO3发现交换的alloc和init调用。
答案 3 :(得分:0)
看一下,当你将对象添加到数组时,引用计数会增加 1 ,因为数组是指该对象。因此,将分配对象添加到数组之后发布会更好<或> ,或者在分配时将其标记为自动释放,以便标记所有对象因为自动释放将在帧结束时选择垃圾回收。
所以试试这个,
MyClass *obj = [[[MyClass alloc] init] autorelease];
或者这个,
MyClass *obj = [[MyClass alloc] init];
....
....
[classArray addObject: obj];
[obj release];