Objective-C中的属性和实例变量

Objective-C中的属性和实例变量,第1张

概述我对Objective-C中的属性实例变量很困惑。 我在一半的时间通过Aaron Hillegass的“Cocoa Programming for Mac OS X”,一切都是合乎逻辑的。你可以声明一个类,像这样: @class Something;@interface MyClass : NSObject { NSString *name; NSArray *items; 我对Objective-C中的属性和实例变量很困惑。

我在一半的时间通过Aaron Hillegass的“Cocoa Programming for Mac OS X”,一切都是合乎逻辑的。你可以声明一个类,像这样:

@class Something;@interface MyClass : NSObject {    Nsstring *name;    NSArray *items;    Something *something;    IBOutlet NSTextFIEld *myTextFIEld;}@property (nonatomic,retain) Nsstring *name;@property (nonatomic,retain) NSArray *items;

>由于其他对象需要 *** 纵我们的名称和项目实例变量,我们使用@ property / @ synthesize为它们生成访问器/ mutator。在我们的类中,我们不使用访问器/变量 – 我们只是直接与实例变量交互。
> something只是一个我们要在类中使用的实例变量,因为没有其他人需要使用它,我们不会为它创建一对访问器和mutator。
>我们需要在UI中与文本字段交互,因此我们声明一个IBOutlet,连接它,我们完成。

所有很合乎逻辑。

然而,在iPhone世界里,事情似乎不同。人声明每个单个实例变量的属性,声明IBOutlets的属性,并使用访问器/ mutator来与类中的实例变量进行交互(例如,他们写入[self setname:@“Test”],而不是name = @“Test” 。

为什么?到底是怎么回事?这些差异是否因iPhone而异?为所有实例变量声明属性,声明IBOutlet的属性,以及在您自己的类中使用访问器/变异器有什么优点?

解决方法 在iPhone世界里,没有垃圾回收器可用。你必须仔细管理内存与引用计数。考虑到这一点,考虑以下之间的区别:

name = @"Test";

self.name = @"Test";// which is equivalent to:[self setname: @"Test"];

如果你直接设置实例变量,没有预先考虑,你将失去对上一个值的引用,你不能调整它的保留计数(你应该手动释放它)。如果通过属性访问它,它会自动为您处理,同时增加新分配的对象的保留计数。

基本概念不是iPhone特定的,但它在没有垃圾收集器的环境中变得至关重要。

总结

以上是内存溢出为你收集整理的Objective-C中的属性和实例变量全部内容,希望文章能够帮你解决Objective-C中的属性和实例变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存