声明实例变量在IOS - Objective-C的(Declaring instance var

2019-09-02 17:02发布

好吧,我读了很多围绕这些天关于这个话题,我alwyas感到困惑,因为答案是不同的每一个搜索我做。

我需要知道的iOS声明实例变量的最佳方式。 到目前为止,我知道我应该只是宣布他们.m文件里,让它.H干净。 但我不能做到这一点:编译器给我的编译错误回报。

下面是从.M只有一些代码。

@interface UIDesign ()

// .m file
{
    NSString *test2 = @"test2";
}

@property (nonatomic, assign) int privateInt;

@end

@implementation UIDesign
{
    NSString *test1 = @"test1";
}

这两个字符串被宣告不正确,我不知道为什么。 编译器说: 预期“;” 在声明列表的末尾

所以,问题是:我怎么可以声明实例变量? 我只需要它们的类内。

Answer 1:

你不能初始化实例变量。 他们都初始化为零或零。 所以编译器期望,当你正在编写一个等号分号。

您可以在init()方法对它们进行初始化。



Answer 2:

您正在尝试一个实例变量添加到一个类扩展或类别,它不支持。 [编辑2013年5月12日08年6月11日:类延伸的ivars被支持,但不是在类别。作为替代:

@interface UIDesign : NSObject
@end

@interface UIDesign ()

@property (nonatomic, assign) int privateInt;
@end

@implementation UIDesign

@synthesize privateInt = _privateInt;

- (void)someMethod {
    self.privateInt = 42;
}

@end

在另一方面,如果你只是想声明实现内部的实例变量,只是做有:

@implementation UIDesign {
    int _privateInt;
}

@end

编辑:只注意到你也尝试在这也是不支持的声明来初始化实例变量。 所以:

@interface UIDesign : NSObject
@end

@implementation UIDesign {
    NSString *_test;
}

- (id)init {
    self = [super init];
    if( !self ) return nil;

    _test = @"Foo";

    return self;
}

@end


文章来源: Declaring instance variables in iOS - Objective-C