iphone - iPhone 开发中的 Objective-C 属性

标签 iphone objective-c properties

Objective-C 中的属性和实例变量有什么区别。我需要用 OOP 术语来理解这一点。属性声明只是一个方便的包装器(在实现中使用@synthesize)来访问实例变量吗?

谢谢,

代码牛仔。

最佳答案

Properties 和ivars 是两个完全不同的东西。

而实例变量是存储在对象内部的变量,所以每个实例都有自己的。它通过相对于对象指针/自身的指针添加来引用(对于现代运行时来说略微间接,但在功能上是等效的)。 ivar 通常是类内部的,默认情况下只能由该类及其后代访问(@protected)。在方法中,它们无需限定即可使用,否则它们可以(但很少,通常不应该)通过间接访问,例如 obj->ivar。

一个属性定义了一个 getter 和 setter(setter 是可选的)接口(interface)。这就是它所做的一切。它定义了两个公共(public)方法:

- (TYPE) propname;
- (void) setPropname: (TYPE) newPropname;

这些被定义为方法,就像您那样声明它们一样,不多也不少。这些方法使用普通语法([obj propname] 和 [obj setPropname:n] 或使用现代点符号(obj.propname 或 obj.propname = n)调用。这两个选项仅在语法上不同,它们的行为相同, 并且无论方法是使用 @property 声明还是如上所述手动声明,您都可以使用点符号。

然后您必须在实现中实现这些方法,方法是自己编写方法、使用@synthesize 或动态处理缺少的方法。

属性可能由 ivar 支持(命名相同或不同(我的偏好是为了避免混淆)),也可能不支持。他们可能会将其值(value)存储在其他地方,或者他们可能会从其他数据中计算出来。

例如,您可能有:

@property (nonatomic, readonly) NSString* fullname;

然后实现 - (NSString*) fullname 以返回名字和姓氏的串联。

关于iphone - iPhone 开发中的 Objective-C 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096611/

相关文章:

iphone - About Objects对iPhone开发类(class)的看法/评论。值得吗?

iphone - 你能帮我理解 cocoa/objective-c 中的保留计数吗?

objective-c - 检查我的应用程序用户使用的 iOS 版本

iphone - 从以分钟为单位的数字中检索月、日、小时、分钟

JavaScript : Check if object has properties

grails - 如何从另一个命令对象访问命令对象的属性?

javascript - 如何指定在对对象执行 console.log 时显示哪个属性?

ios - iOS:日期格式-星期六| 2016年8月4日

iphone - 无法在 applicationWillResignActive 中获取当前 ViewController

iphone - 关于 Apple 应用内链接政策