在iOS6的+

问题描述:

例如关于@synthesize:在iOS6的+

//Myclass.h 
@property(nonatomic, strong) NSString *name; 

//MyClass.m 
//@synthesize name = _name 

所以我知道,我们并不需要使用@synthesize从iOS6的+了。编译器自动为我创建getter和setter。

  1. 但我不明白的是,当使用self.name = @"Testing"以及何时使用_name = @"Testing"

  2. _name = @"Testing"应该使用过吗?

  3. 如果是,什么时候?什么时候应该使用iVAR?

  4. 另外,如果我想写我自己的getter和setter我需要写@synthesize或者我可以写我的getter和setter?

感谢您的帮助!

+0

基本准则在[实用内存管理]中概述(https://developer.apple.com/library/mac/documentation/cocoa/conceptual/memorymgmt/Articles/mmPractical.html#//apple_ref/doc/ uid/TP40004447-SW1)部分__高级内存管理编程指南._顺便说一句,你通常应该避免写你自己的存取方法,除非你绝对需要。绝大多数时候,综合访问器方法为你完成这项工作。 – Rob

+0

谢谢Rob。感谢! –

通常情况下,您只能在init方法,getter和setters以及dealloc中使用实例变量。当然也有例外,但这是一个很好的经验法则。

如果你写两个自己的getter 制定者(或只读属性的情况下,你写的getter),你必须自己合成你的财产。在所有其他情况下,该房产是自动合成的。

+0

如果您正在编写getter和/或setter,则不应合成该属性。编译器生成具有相同名称的两个(一对)方法是错误的。 – 2013-10-13 05:06:40

+0

@ H2CO3:如果您编写setter和getter(或只是getter,如果它是只读属性),编译器将不会创建实例变量。 –

+0

我知道。这并不意味着你应该综合它。合成!=宣布一个伊娃(在这种情况下应该完成)。 – 2013-10-13 06:01:51