在Objective-C中何时使用“self”?

在Objective-C中何时使用“self”?,objective-c,self,Objective C,Self,现在我在Objective-C已经5个多月了,我的第一个应用程序也在应用程序商店发布了,但我仍然对该语言的核心功能有疑问 我应该何时使用self访问IVAR,何时不使用 释放插座时,在viewDidUnload中写入self.outlet=nil,而在dealloc中写入[outlet release]。为什么?您在引用@属性时使用self。 通常它会被“合成” 如果引用的是“私有”变量,则不使用self。通常,我使用UI元素(如UIButtons)的属性,或者使用希望从其他类轻松访问的元素的属

现在我在Objective-C已经5个多月了,我的第一个应用程序也在应用程序商店发布了,但我仍然对该语言的核心功能有疑问

我应该何时使用
self
访问IVAR,何时不使用


释放插座时,在viewDidUnload中写入
self.outlet=nil
,而在
dealloc
中写入
[outlet release]
。为什么?

您在引用@属性时使用self。 通常它会被“合成”

如果引用的是“私有”变量,则不使用self。通常,我使用UI元素(如UIButtons)的属性,或者使用希望从其他类轻松访问的元素的属性。 可以使用@protected修饰符显式强制可见性。但是,您不能使用Objective-C中不存在的私有方法

关于nil、release和dealoc的部分与“self”的使用无关。你释放你保留的,你没有自动恢复的


你应该读这本书,它写得很好,很有启发性。

你使用self。当您访问所处类的属性时(因此是self)。基本上,当您希望保留值时使用self,但仅当您在属性定义中具有retain时才使用self


release仅释放您保留的对象。你不应该释放你没有保留的东西,因为它会导致崩溃(僵尸对象)。

当你编写
self.outlet=nil
方法
[self-setOutlet:nil]被调用。当您写入
outlet=nil时您可以直接访问变量
outlet


如果您使用
@outlet然后自动生成方法
setOutlet:
,如果您将属性声明为
@property(retain)NSObject outlet,则在分配新对象之前释放对象

了解objective c中getter setter方法的属性非常重要

                Understanding your (Objective-C) self

-1是的,存在私有变量,请参见
@private
。您关于使用nil、release和dealoc的推理也不正确
self.foo
是一个属性。将其设置为nil将释放其上一个值
foo
是一个变量,将其设置为nil会导致旧值泄漏。区别在于,将属性设置为nil实际上是发送一条消息,该消息会导致旧值与其他内容一起被释放。@JeremyP您完全正确。我的记忆力不好:/但是,我关于使用nil的推理并没有停止(我的应用程序不会泄漏),我认为我的用词和你自己说的一模一样。我可能解释得不好,或者你可能得出了错误的结论。无论如何,+1用于刷新我对私有修改器的记忆。我删除了否决票,因为你修复了我否决票的部分。我仍然认为你有关于使用自我困惑的东西。到目前为止,最好的答案是。