在iOS中声明实例变量 - Objective-C

时间:2013-05-12 10:21:54

标签: objective-c variables instance

好的,这些天我已经阅读了很多关于这个主题的内容,我感到困惑,因为每次搜索的答案都不同。

我需要知道在iOS中声明实例变量的最佳方法。到目前为止,我知道我应该只在.m文件中声明它们并保留.h clean。但我不能这样做:编译器给我编译错误。

以下是.m的一些代码。

@interface UIDesign ()

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

@property (nonatomic, assign) int privateInt;

@end

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

两个字符串都声明不正确,我不知道为什么。编译器说: expected';'在声明清单末尾

所以问题是:如何声明实例变量?我只会在课堂上需要他们。

2 个答案:

答案 0 :(得分:1)

您正在尝试将实例变量添加到不受支持的类扩展或类别。 [编辑2013-05-12 06-11-08:支持类扩展中的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

答案 1 :(得分:1)

您无法初始化实例变量。它们都被初始化为零或零。所以当你写一个等号时,编译器会期望一个分号。

您可以在init方法中初始化它们。

相关问题