好的,这些天我已经阅读了很多关于这个主题的内容,我感到困惑,因为每次搜索的答案都不同。
我需要知道在iOS中声明实例变量的最佳方法。到目前为止,我知道我应该只在.m文件中声明它们并保留.h clean。但我不能这样做:编译器给我编译错误。
以下是.m的一些代码。
@interface UIDesign ()
// .m file
{
NSString *test2 = @"test2";
}
@property (nonatomic, assign) int privateInt;
@end
@implementation UIDesign
{
NSString *test1 = @"test1";
}
两个字符串都声明不正确,我不知道为什么。编译器说: expected';'在声明清单末尾。
所以问题是:如何声明实例变量?我只会在课堂上需要他们。
答案 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方法中初始化它们。