现在已经超过5个月,我在Objective-C,我也在App Store中发布了我的第一个应用程序,但我仍然怀疑该语言的核心功能。
我应该何时使用self
访问iVars,何时不使用?
在发布插座时,您在viewDidUnload中编写self.outlet = nil
,而在dealloc
中编写[outlet release]
。为什么呢?
答案 0 :(得分:6)
当您编写self.outlet = nil
时,会调用方法[self setOutlet:nil];
。当您撰写outlet = nil;
时,您可以直接访问变量outlet
。
如果使用@synthesize outlet;
,则会自动生成方法setOutlet:
,如果您将属性声明为@property (retain) NSObject outlet;
,则会在分配新对象之前释放对象。
答案 1 :(得分:3)
非常重要的博客,了解目标c中的属性getter-setter方法
Understanding your (Objective-C) self
http://useyourloaf.com/blog/2011/2/8/understanding-your-objective-c-self.html
答案 2 :(得分:1)
当您引用@property时,您使用self。 通常它会被@ synthesize'd。
如果您引用“私人”变量,则不使用self。通常,我使用UI元素(如UIButtons)的属性或我希望从其他类可以轻松访问的元素。 您可以使用@private,@ protected修饰符来明确强制实施可见性。但是,您不能使用Objective-C中不存在的私有方法。
关于nil,release和dealloc的部分与“self”的使用无关。你释放你保留的东西,你没有自动恢复的东西。
你应该阅读Objective-C guide,它写得很好,很有启发性。
答案 3 :(得分:0)
你使用自我。当你访问你所在的类的属性时(因此自己)。基本上,当您想要保留值时,您可以使用self,但仅当您保留在属性定义中时才使用self。
发布只释放您保留的对象。你不应该发布你没有保留的东西,因为它会导致崩溃(僵尸对象)。