在iOS6的+
例如关于@synthesize:在iOS6的+
//Myclass.h
@property(nonatomic, strong) NSString *name;
//MyClass.m
//@synthesize name = _name
所以我知道,我们并不需要使用@synthesize
从iOS6的+了。编译器自动为我创建getter和setter。
但我不明白的是,当使用
self.name = @"Testing"
以及何时使用_name = @"Testing"
?_name = @"Testing"
应该使用过吗?如果是,什么时候?什么时候应该使用iVAR?
另外,如果我想写我自己的getter和setter我需要写
@synthesize
或者我可以写我的getter和setter?
感谢您的帮助!
通常情况下,您只能在init方法,getter和setters以及dealloc中使用实例变量。当然也有例外,但这是一个很好的经验法则。
如果你写两个自己的getter 和制定者(或只读属性的情况下,你写的getter),你必须自己合成你的财产。在所有其他情况下,该房产是自动合成的。
如果您正在编写getter和/或setter,则不应合成该属性。编译器生成具有相同名称的两个(一对)方法是错误的。 – 2013-10-13 05:06:40
@ H2CO3:如果您编写setter和getter(或只是getter,如果它是只读属性),编译器将不会创建实例变量。 –
我知道。这并不意味着你应该综合它。合成!=宣布一个伊娃(在这种情况下应该完成)。 – 2013-10-13 06:01:51
基本准则在[实用内存管理]中概述(https://developer.apple.com/library/mac/documentation/cocoa/conceptual/memorymgmt/Articles/mmPractical.html#//apple_ref/doc/ uid/TP40004447-SW1)部分__高级内存管理编程指南._顺便说一句,你通常应该避免写你自己的存取方法,除非你绝对需要。绝大多数时候,综合访问器方法为你完成这项工作。 – Rob
谢谢Rob。感谢! –