我可以理解在头文件的@interface中定义函数,但为什么实例变量?实例变量不应该是私有的,只能通过消息访问吗?
原因是它可以计算子类的变量偏移量.
@interface Bird : NSObject {
int wingspan;
}
@end
@interface Penguin : Bird {
NSPoint nestLocation;
Penguin *mate;
}
@end
Run Code Online (Sandbox Code Playgroud)
在不知道"Bird"类的结构的情况下,"Penguin"类无法从结构的开头计算其字段的偏移量.企鹅结构看起来像这样:
struct Penguin {
int refcount; // from NSObject
int wingspan; // from Bird
NSPoint nestLocation; // from Penguin
Penguin *mate; // from Penguin
}
Run Code Online (Sandbox Code Playgroud)
这有副作用:如果更改库中类的大小,则会中断链接到该库的应用程序中的所有子类.新属性解决此问题.
如果有人遇到这个问题 - 从使用LLVM编译器的XCode 4.2开始,您可以使用以下括号表示法在@implementation中声明实例变量:
@interface SomeClass : NSObject
@end
@implementation SomeClass {
NSString *myInstanceVariable_;
}
- (void)moreMethods {}
@end
Run Code Online (Sandbox Code Playgroud)
实例变量通常不应该是声明为public interface的类的一部分 - 它们是实现细节.
但是,请确认您的括号内定义的实例变量,否则你会被限定已没有关系对象实例的全局变量:
@implementation SomeClass
NSString *whoopsGlobalVariable_;
- (void)moreMethods {}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4212 次 |
| 最近记录: |