2015-06-28 3 views
1

У меня есть объект синглтон obj1, имеющий NSMutableArray член называется объектовли он может переопределить метод init NSObject, чтобы добавить каждый объект в один NSMutableArray?

и я добавил категорию под названием NSObject (Регистрация)

@implementation NSObject (Register) 
-(id)init 
{ 
    [[obj1 defaultObject] addObjectToView:self]; 
    return self; 
} 
@end 

addObjectToView метод просто добавить объект к массиву

-(void)addObjectToView:(id)object 
{ 
    [object retain]; 
    [Objects addObject:object]; 
} 

(Object является NSMutableArray)

проблема, когда я попытался проверить это, я сделал

NSWindow *window = [[NSWindow alloc] init]; 

, а затем я получил 505 пугающие объекты в массиве,

enter image description here

Я сделал что-то не так?

BTW, можно управлять связью всех объектов и отправлять объекты изоляции dealloc сообщение для реализации сборщика мусора в Objective-C?

+1

OMG! Сборщик мусора во времена ARC. –

ответ

0

Не делайте этого!

Это захватывает почти все созданные объекты и не позволяет им освободиться. Фактически даже дважды, когда вы сохраняете их вручную, а затем добавляете их в изменяемый массив, который сохраняет их также.

Также вы не можете переопределять методы в категориях. Это sortof работает, но как только есть вторая категория, которая переопределяет один и тот же метод, он не определен, какой из них действительно будет использоваться.

Реализация сборщика мусора поверх этого тоже не будет работать. Также вам не нужен сборщик мусора. Apple использовала, чтобы предоставить один, но теперь он устарел и будет удален. Также вам это не нужно - используйте ARC.