首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在对象的init方法中使用self关键字赋值ivar

在对象的init方法中使用self关键字赋值ivar
EN

Stack Overflow用户
提问于 2010-11-24 00:51:21
回答 3查看 376关注 0票数 1

我读到在and对象的'init‘方法中使用self.ivar =(便利性方法)是不好的,因为这会扰乱继承。

然而,如果你知道你不会子类化你的对象,是否可以使用self关键字赋值?

代码语言:javascript
复制
i.e. self.iVar = [Object objectConvenienceMethod];

我问的原因是这样的。我创建了一个具有自己的init方法的新对象,在该方法中,我执行各种初始赋值。因为我没有使用self关键字,所以我将它们直接赋值给iVars,因此使用alloc方法而不是便利性方法。也就是说。

代码语言:javascript
复制
iVar = [[Object alloc] init];

或者如果我使用一种方便的方法,我会保留它。也就是说。

代码语言:javascript
复制
iVar = [[Object convenienceMethod]retain]

但是..。当我在打开内存泄漏工具的情况下运行我的程序时,所有这些分配都被标识为内存泄漏。

如果我可以使用self关键字加上一个方便的方法,而不是alloc-init,那么就可以避免这个问题。

但是,如果我选择使用alloc-init方法,我应该在哪里发布iVars?只是在去配给吗?

感谢您的帮助:)

迈克尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-24 02:11:49

我认为你的“封闭”类没有被释放,因此它的dealloc方法没有被调用,导致你的iVars没有被释放。

票数 0
EN

Stack Overflow用户

发布于 2010-11-24 02:19:07

不,因为它不只是你需要考虑的子类行为-超类实现,甚至框架生成的代码的行为(例如,合成访问器和用于实现KVO的黑魔法)也会造成麻烦。这可能是可以的,但这仍然是一个重要的机会,不- OK。总而言之,最好的办法就是按照苹果的建议直接分配。

在init中赋值给ivars不应该被报告为正常运行的程序中的泄漏。如果您看到了这一点,那么您还需要解决其他一些问题。尝试将问题减少到我们可以尝试并询问的最小情况-然后我们就可以知道哪里出了问题。

票数 2
EN

Stack Overflow用户

发布于 2010-11-24 01:16:54

如果在类的init方法中对它们执行allocretain操作,则应该在相应的dealloc方法中释放它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4258568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档