iphone – 属性与实例变量

iphone – 属性与实例变量,第1张

概述我试图理解一些人如何使用战略来区分实例vars与属性。常见的模式如下: @interface MyClass : NSObject { NSString *_myVar;}@property (nonatomic, retain) NSString *myVar;@end@implementation MyClass@synthesize myVar = _myVar; 现在 我试图理解一些人如何使用战略来区分实例vars与属性。常见的模式如下:

@interface MyClass : NSObject {    Nsstring *_myVar;}@property (nonatomic,retain) Nsstring *myVar;@end@implementation MyClass@synthesize myVar = _myVar;

现在,我认为这个策略背后的整个前提是,人们可以很容易地区分ivar和属性之间的区别。所以,如果我想使用由合成属性继承的内存管理,我会使用诸如:

myVar = @"Foo";

另一种方式是通过自我引用它。[ivar / property here]。

使用@synthesize myVar = _myVar策略的问题是,我认为编写代码如:

myVar = some_other_object; // doesn't work.

编译器抱怨myVar未声明。为什么会这样?

谢谢。

解决方法 属性只是ivars的setters和getter,应该(几乎)总是使用而不是直接访问。

@interface APerson : NSObject {    // Nsstring *_name;           //  necessary for legacy runtime}@property(reaDWrite) Nsstring *name;@end@implementation APerson@synthesize name;                 // use name = _name for legacy runtime@end

@synthesize在这种情况下创建这两个方法(不是100%准确):

- (Nsstring *)name {    return [[_name copy] autorelease];}- (voID)setname:(Nsstring *)value {    [value retain];    [_name release];    _name = value;}

现在很容易区分ivars和getters / setter。访问者有自我。字首。你不应该直接访问变量。

您的示例代码不工作,因为它应该是:

_myVar = some_other_object;      // _myVar is the ivar,not myVar.self.myVar = some_other_object;  // works too,uses the accessors
总结

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

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存