如果我';m取决于objective-c中的垃圾收集

如果我';m取决于objective-c中的垃圾收集,objective-c,cocoa,memory,garbage-collection,Objective C,Cocoa,Memory,Garbage Collection,Cocoa和Objective-c的新成员 如果我依赖于垃圾收集,我需要getter和setter吗 例如,直接修改实例变量而不使用点语法是否安全 在dealoc方法中,我是否可以将它们发送到nil而不是release(或者我是否必须释放它们)?是封装的一种方法,ivar是实现细节 通过属性访问允许您更改内部设计,同时保持界面不变 无论程序是否启用了GC,您都不应该直接从外部访问ivar(内部可以) (此外,如果启用了GC(非ARC),则会忽略-dealoc方法。您可以实现-finalize。但

Cocoa和Objective-c的新成员

如果我依赖于垃圾收集,我需要getter和setter吗

例如,直接修改实例变量而不使用点语法是否安全

在dealoc方法中,我是否可以将它们发送到nil而不是release(或者我是否必须释放它们)?

是封装的一种方法,ivar是实现细节

通过属性访问允许您更改内部设计,同时保持界面不变

无论程序是否启用了GC,您都不应该直接从外部访问ivar(内部可以)

(此外,如果启用了GC(非ARC),则会忽略
-dealoc
方法。您可以实现
-finalize
。但是GC应该足够智能,可以清理不再需要的ivar,无论是否将它们设置为
nil

是封装的一种方法,ivar是一个实现细节

通过属性访问允许您更改内部设计,同时保持界面不变

无论程序是否启用了GC,您都不应该直接从外部访问ivar(内部可以)


(此外,如果启用了GC(非ARC),则会忽略
-dealloc
方法。您可以实现
-finalize
。但是GC应该足够智能,可以清理不再需要的IVAR,无论是否将它们设置为
nil

当然,您可以在类本身中直接修改私有变量。考虑访问器主要是为了公开公共接口,避免其他类直接修改对象。这来自于面向对象的范例,而不是内存管理

关于这个版本,最好清楚地了解它是如何使用retain计数的,以及在这个计数上有什么作用。某些方法(如init increase)保留对象,而另一些方法则不保留对象。许多静态方法返回新的可随时使用的对象,如ImageWithName:返回一个自动释放对象,您必须显式保留该对象才能拥有它

最好是在将所有权转移到另一个对象(例如数组)时释放并设置为nil

清楚吗


Vince.

当然,您可以从类本身直接修改私有变量。考虑访问器主要是为了公开公共接口,避免其他类直接修改对象。这来自于面向对象的范例,而不是内存管理

关于这个版本,最好清楚地了解它是如何使用retain计数的,以及在这个计数上有什么作用。某些方法(如init increase)保留对象,而另一些方法则不保留对象。许多静态方法返回新的可随时使用的对象,如ImageWithName:返回一个自动释放对象,您必须显式保留该对象才能拥有它

最好是在将所有权转移到另一个对象(例如数组)时释放并设置为nil

清楚吗


文斯。

现在我基本上只有一个应用程序控制器类。所以在这种情况下,我不需要getter和setter来修改它自己的变量,对吗?@Chris:不需要在AppController类中使用属性(假设属性是@synthesis-d)。但从外部来看,你必须使用属性。我不同意@KennyTM的建议。虽然属性访问器对于公开(公共)实例变量是有意义的,但在使用ARC时,我看不到类的本地IVAR有这样的理由。setter过去对于表示对象的ivar是必需的,因为它们负责正确地释放以前分配的对象。但对于ARC来说,这已经不必要了。因此,除了编码样式首选项之外,没有理由将本地IVAR声明为属性。如果我错了,请纠正我。@KennyTM。可以但当我读到你的答案时,我得到的印象是,你会把它作为任何ivar的一般规则,而这正是我所反对的。问题基本上是:不使用财产安全吗?答案是:是的,使用ARC是安全的,只是风格不好。@ThomasTempelmann:没有ARC≠ GC。它仅存在于OS X上,已被弃用。看,现在我基本上只有一个应用程序控制器类。所以在这种情况下,我不需要getter和setter来修改它自己的变量,对吗?@Chris:不需要在AppController类中使用属性(假设属性是@synthesis-d)。但从外部来看,你必须使用属性。我不同意@KennyTM的建议。虽然属性访问器对于公开(公共)实例变量是有意义的,但在使用ARC时,我看不到类的本地IVAR有这样的理由。setter过去对于表示对象的ivar是必需的,因为它们负责正确地释放以前分配的对象。但对于ARC来说,这已经不必要了。因此,除了编码样式首选项之外,没有理由将本地IVAR声明为属性。如果我错了,请纠正我。@KennyTM。可以但当我读到你的答案时,我得到的印象是,你会把它作为任何ivar的一般规则,而这正是我所反对的。问题基本上是:不使用财产安全吗?答案是:是的,使用ARC是安全的,只是风格不好。@ThomasTempelmann:没有ARC≠ GC。它仅存在于OS X上,已被弃用。看见
NSString *myName   = @"zgueb";
NSArray  *myFamily = [[NSArray alloc] initWithObjects:myName, nil];
// now myName is retained by myFamily, i can release it
[myName release]; 
myName = nil;