首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C-记忆管理问题?

目标C-记忆管理问题?
EN

Stack Overflow用户
提问于 2010-09-16 01:01:35
回答 4查看 133关注 0票数 0

我知道,当我拥有一个被设置为保留或复制的对象的属性时,我必须执行以下操作。

代码语言:javascript
复制
Object *o = [[Object alloc] init];
self.myObject = o;
[o release];

但是,如果我不为myObject定义属性呢?

我可以在不泄密的情况下做以下事情吗?

为每个类中的每个变量定义一个属性更好吗?,为什么是

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-16 01:02:53

您可以做的是确保在将保存它的变量赋值给新实例之前释放先前分配的对象(无论它是另一个对象的保留版本,还是它的副本)。

如果不为其定义属性,则不要使用点语法。

票数 1
EN

Stack Overflow用户

发布于 2010-09-16 02:30:05

是的,您可以通过这种方式设置实例变量,这是完全可以的--事实上,这是init方法中的首选方法(因为setter可能有副作用)。只需记住在设置新对象之前释放变量中的旧对象(如果有的话),否则会泄漏。无论您使用属性还是直接设置ivar,都需要在dealloc中释放该对象。

票数 2
EN

Stack Overflow用户

发布于 2010-09-16 01:20:20

因为雅各布已经回答了无财产的部分。我会回答左边的

我可以在没有泄漏的情况下做以下工作?

myObject = [[Object alloc] init];

您必须在某个地方发布myObject,可能是在委托方法中,或者在您使用完它之后,但是请记住释放对象,特别是在失去对象引用之前。

是否更好地为每个类中的每个变量定义一个属性?为什么??

这取决于您的编码约定,定义所有属性将在很大程度上帮助您进行内存管理,但它会带来负担,有时您的团队不希望为每个变量定义实例变量、属性和合成,这意味着有相当多的代码。因此,与你的团队讨论,看看你的弱点和优势。如果您在内存管理方面比较薄弱,我建议您为每个

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

https://stackoverflow.com/questions/3722998

复制
相关文章

相似问题

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