NSMutableArray: Как мне исправить этот код 'EXC_BAD_ACCESS'? - PullRequest
0 голосов
/ 08 января 2011

Я делаю приложение OpenGL, но получаю сообщение EXC_BAD_ACCESS.

Вот мой код:

//(draw function only, ask if you need more)
//objects: array of triangles/quads
//Triangle/Quad3D: should be obvious, I like OOP
//PS this is in a 'Composite Object' class
- (void)draw {
    //NSLog(@"%@",objects);
    NSMutableArray *quad, *tri;
    quad =  [NSMutableArray arrayWithCapacity:0];
    tri =   [NSMutableArray arrayWithCapacity:0];
    NSEnumerator *e = [objects objectEnumerator];
    id object;
    while (object = [e nextObject]) {
        if ([object isKindOfClass:[Triangle3D class]]) {
            [tri addObject:(Triangle3D *)object];
        } else if ([object isKindOfClass:[Quad3D class]]) {
            [quad addObject:(Quad3D *)object];
        }
    }
    NSLog(@"%d",[tri count]);
    NSLog(@"%d",[quad count]);
    [quad release];
    [tri release];
    [e release];
}

1 Ответ

14 голосов
/ 08 января 2011

Вы выпускаете объекты, которыми вы не владеете, поскольку они автоматически высвобождаются в соответствии с соглашениями об именах, приведенными в http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

Вы вступаете во владение объектом, если создаете его с помощью метода, имя которого начинается с «alloc» или «new» или содержит «copy» (например, alloc, newObject или mutableCopy), или если вы отправляете ему сохранить сообщение.

+arrayWithCapacity: не начинается с «alloc» или «new» и не содержит «copy», поэтому вы не должны освобождать возвращаемый объект, если вы явно не сохранили этот объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...