具有属性&的实例变量合成,没有它们 - ARC

时间:2013-04-12 14:45:06

标签: iphone objective-c automatic-ref-counting

您可以声明一个这样的变量。

情况1:

@interface MyClass : NSObject
{
    NSString *str;
}

@end

另外,如果要设置其属性,可以执行

情况2:

@interface MyClass : NSObject
{
    NSString *str;
}
@property (nonatomic, strong) NSString *str;

@end

在.m,

@synthesize str;

我对案例1和案例2之间区别的理解是,当另一个类实例化该类时,可以从另一个类访问案例2中的合成和有属变量。

案例1和案例2之间还有哪些其他区别?说这些变量何时只在其.m文件中使用。您设置'str'属性的事实可能会有所不同,但如何?如果你没有设置属性,它们将如何与ARC一起发布?

1 个答案:

答案 0 :(得分:1)

由于设置的方式,在这种情况下差异相当混乱。

此外,它正在使用现在的旧做法。

新建议的做法(由Apple建议)就是这样做......

MyClass.h

@interface MyClass : NSObject

@property (nonatomic, strong) NSString *str;

@end

MyClass.m

#import "MyClass.h"

@implementation MyClass

@end

您不再需要@synthesize作为Xcode(自4.5起)将自动为您生成这些。

这样做会设置名为str的属性和名为_str的iVar。

您现在不再需要担心定义多个ivars和属性等...只需使用该属性就可以了。

属性str的示例setter方法看起来像这样......

- (void)setStr:(NSString*)str
{
    _str = str;
}