1

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

我需要知道在 iOS 中声明实例变量的最佳方式。到目前为止,我知道我应该只在 .m 文件中声明它们并让 .h 保持干净。但我做不到:编译器给了我编译错误。

这是仅来自 .m 的一些代码。

@interface UIDesign ()

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

@property (nonatomic, assign) int privateInt;

@end

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

两个字符串都被错误地声明了,我不知道为什么。编译器说:预期的';' 在声明列表的末尾

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

4

2 回答 2

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
于 2013-05-12T10:29:15.590 回答
1

您不能初始化实例变量。它们都被初始化为零或零。因此,当您编写等号时,编译器需要一个分号。

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

于 2013-05-12T10:32:05.000 回答