是否能够覆盖NSObject init方法将每个对象添加到单个NSMutableArray中?

时间:2015-06-28 10:56:56

标签: objective-c macos cocoa objective-c-runtime

我有一个单例对象obj1,有一个名为 Objects 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

我做错了吗?

顺便说一句,可以管理所有对象的关系并发送隔离对象 dealloc 消息来实现Objective-C中的垃圾收集器吗?

1 个答案:

答案 0 :(得分:0)

不要那样做!

这会捕获几乎所有创建的对象并阻止它们被释放。实际上,甚至两次手动保留它们然后将它们添加到可变数组中也保留它们。

此外,您无法覆盖类别中的方法。它排序确实有效,但是只要有第二个类别覆盖同一个方法,它就会被定义为实际使用哪一个。

在其上实现垃圾收集器也不会起作用。你也不想要垃圾收集器。 Apple过去常常提供一个,但现在已弃用,将被删除。你也不需要它 - 使用ARC。