【发布时间】:2011-09-28 07:22:37
【问题描述】:
我正在使用单例类实现对象重用方案。
我做的基本上是:
MyClass* obj = [[MyClassBank sharedBank] getReusableItem];
bank 只是一个 NSMutableSet,它经过调整以实现最佳的可重用性。当我愉快地实现这个 Singleton 时,我想到当我用完“obj”后我会做以下事情:
[[MyClassBank sharedBank] doneWithItem:obj];
目前,如果我以这种方式在哪里使用它,我的代码会起作用,但后来我意识到我有时会在“NSCollection”中添加“obj”,有时我会调用:
[theCollection removeAllObjects];
起初我想创建一个由集合组成的自己的类,然后我会迭代集合中的对象并调用:
[[MyClassBank sharedBank] doneWithItem:obj];
但是,这太麻烦了,不是吗?
一个好主意(我认为)突然出现在我的脑海中,那就是覆盖:-(oneway void)release;,因此,我立即跳转到 Apple 的文档,但遇到以下问题:
您只能实现此方法来定义您自己的引用计数方案。这样的实现不应该调用继承的方法;也就是说,它们不应包含对 super 的发布消息。
Ao,我不愿意做这个想法..基本上:
-(oneway void)release{
if ([self retainCount] == 1) {
//This will increment retain count by adding self to the collection.
[[MyClassBank sharedBank] doneWithItem:self];
}
[super release];
}
这样做安全吗?
PS:抱歉,帖子太长了,我希望整个想法都清楚..
编辑:
如何覆盖alloc alltogther 并在那里添加[[MyClassBank sharedBank] getReusableItem];?
【问题讨论】:
-
这是我第一次知道对象池模式:en.wikipedia.org/wiki/Object_pool_pattern
标签: objective-c overriding release reusability nsobject