我读到在and对象的'init‘方法中使用self.ivar =(便利性方法)是不好的,因为这会扰乱继承。
然而,如果你知道你不会子类化你的对象,是否可以使用self关键字赋值?
i.e. self.iVar = [Object objectConvenienceMethod];我问的原因是这样的。我创建了一个具有自己的init方法的新对象,在该方法中,我执行各种初始赋值。因为我没有使用self关键字,所以我将它们直接赋值给iVars,因此使用alloc方法而不是便利性方法。也就是说。
iVar = [[Object alloc] init];或者如果我使用一种方便的方法,我会保留它。也就是说。
iVar = [[Object convenienceMethod]retain]但是..。当我在打开内存泄漏工具的情况下运行我的程序时,所有这些分配都被标识为内存泄漏。
如果我可以使用self关键字加上一个方便的方法,而不是alloc-init,那么就可以避免这个问题。
但是,如果我选择使用alloc-init方法,我应该在哪里发布iVars?只是在去配给吗?
感谢您的帮助:)
迈克尔
发布于 2010-11-24 02:11:49
我认为你的“封闭”类没有被释放,因此它的dealloc方法没有被调用,导致你的iVars没有被释放。
发布于 2010-11-24 02:19:07
不,因为它不只是你需要考虑的子类行为-超类实现,甚至框架生成的代码的行为(例如,合成访问器和用于实现KVO的黑魔法)也会造成麻烦。这可能是可以的,但这仍然是一个重要的机会,不- OK。总而言之,最好的办法就是按照苹果的建议直接分配。
在init中赋值给ivars不应该被报告为正常运行的程序中的泄漏。如果您看到了这一点,那么您还需要解决其他一些问题。尝试将问题减少到我们可以尝试并询问的最小情况-然后我们就可以知道哪里出了问题。
发布于 2010-11-24 01:16:54
如果在类的init方法中对它们执行alloc或retain操作,则应该在相应的dealloc方法中释放它们。
https://stackoverflow.com/questions/4258568
复制相似问题