如何发布多个alloc类?

时间:2012-08-24 00:08:51

标签: iphone ios cocos2d-iphone

嗨我很困惑如何释放已经没有存储指针来自头文件的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中的处理内存做一个清晰的想法。帮助我: - )

4 个答案:

答案 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];