gpt4 book ai didi

objective-c - 是否能够重写 NSObject init 方法以将每个对象添加到单个 NSMutableArray 中?

转载 作者:行者123 更新时间:2023-12-03 17:20:27 24 4
gpt4 key购买 nike

我有一个单例对象 obj1,有一个名为 ObjectsNSMutableArray 成员

我添加了一个名为NSObject(寄存器)

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

addObjectToView 方法只是简单地将对象添加到数组

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

(对象是一个 NSMutableArray)

问题是,当我尝试测试它时,我做到了

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

然后我在数组中得到了 505 个可怕的对象,

enter image description here

我做错了什么吗?

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

最佳答案

不要这样做!

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

此外,您不能覆盖类别中的方法。它确实有效,但一旦有第二个类别覆盖相同的方法,就不确定实际使用哪一个。

在此基础上实现垃圾收集器也行不通。而且你也不需要垃圾收集器。 Apple 曾经提供过一个,但现在已弃用并将被删除。而且你也不需要它 - 使用 ARC。

关于objective-c - 是否能够重写 NSObject init 方法以将每个对象添加到单个 NSMutableArray 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com