1
13
Objective-C Runtime Programming Guide: Declared Properties
相当于:
更新 :上面解释了这两种方法的作用。它不能解释他们的目的是什么。-)
|
2
3
编译器将“@”符号解释为指令。这是C语言的目标C“添加”之一。当您声明@property,然后声明@synthesis时,您将指示编译器为您创建getter和setter的指令和相应符号。记住,在C语言中,“=”运算符表示“assign”。在Objective-C扩展所提供的OO上下文中,大多数时候我们都在与 指针 (又称参考)到ISA数据结构(Objective-C中的类)。
在objective-c 2.0之前,所有getter和setter方法都必须由开发人员为每个属性进行编码,在大多数情况下,这些属性都是复制/粘贴代码。要完全符合kvc/kvo,需要
很多
非常冗长的代码…willAccessValueForkey、didUpdateValueForkey语句等。当您使用@property/@合成语法时,新编译器会自动为您添加这些语句。这对开发人员来说是一个巨大的生产力提升。添加到语言中的点语法在社区中有点争议,因为这隐藏了
魔术
编译器代表您解释
来自其他答案中引用的Apple文档 属性声明属性 您可以使用表单@property(attribute[,attribute2,…)来用属性修饰属性。与方法一样,属性的作用域也是它们的封闭接口声明。对于使用逗号分隔的变量名列表的属性声明,属性属性应用于所有命名属性。 如果使用@synthesis指令告诉编译器创建访问器方法,则它生成的代码与关键字指定的规范匹配。如果您自己实现访问器方法,那么应该确保它与规范匹配(例如,如果您指定了copy,那么必须确保您确实复制了setter方法中的输入值)。 |
3
3
我希望这对你有帮助。 @属性和@synthesis用于将对象或变量访问到另一个类中。 下面是一个小例子: 这是头等舱
这是另一类:
这样您就可以访问ClassB中的firstname和lastname。 他们打印: 2012-05-25 14:38:10.766我的例子[8751:c07]firstname=ashvin 2012-05-25 14:38:10.768 MyExample[8751:c07]lastname=Ajadiya |
4
0
只是一个简单的例子,说明为什么您可能不想只做“variable=0”: 假设您拥有此属性:
每当用新的委托替换该委托时,合成的setter和getter将在每次设置时为您处理释放/保留:
真正发生的是:
(这当然是简化的) 您可以在自己的setter和getter中执行非常强大的操作,synthesis用于反复发生的那些操作,如保留属性等。编译时,它会查看@property并相应地构建方法。 |
WkWk · Apple Watch动作通知不起作用 2 年前 |
Otavio Miguel · 在手机中保留我自己未发布的ios应用 2 年前 |
Nico Passaglia · 移动键盘向上移动站点 6 年前 |