Wol*_*urs 47 objective-c automatic-ref-counting
我正在观看WWDC ARC介绍视频,在看到一个Apple工程师谈到Stack示例之前,我看到过ObjC中从未见过的东西.
以下代码用于ARC的堆栈示例:
@implementation Stack
{
// instance variable declared in implementation context
NSMutableArray *_array;
}
- (id)init
{
if (self = [super init])
_array = [NSMutableArray array];
return self;
}
- (void)push:(id)x
{
[_array addObject:x];
}
- (id)pop
{
id x = [_array lastObject];
[_array removeLastObject];
return x;
}
@end
Run Code Online (Sandbox Code Playgroud)
请注意在@implementation指令之后声明的实例变量.
现在让我感到惊讶的是,实际变量实际上可以在实现文件中声明,而不是静态变量.我的问题如下:
Sea*_*ell 40
这确实是一种新的语言特性,如果你必须声明你的ivars(而不是简单地声明属性并让编译器为你生成ivars),这是一个很好的做法.理论上你的头文件应该只暴露你的类的公共接口; 其他一切都属于实现.
需要注意的是,实现文件ivars对于子类是不可见的,如果您手动生成了需要子类化的setter和getter,这有时会有点尴尬.
小智 18
在实现中声明iVars肯定是目标C中的新构造.您需要使用xcode4.2并在构建设置中选择LLVM编译器.我们的想法是让您的头文件更清晰.你可以在花括号中列出你的ivars,就像这个例子;
@implementation MyClass {
int var1;
int var2;
}
Run Code Online (Sandbox Code Playgroud)
Rahul给出的答案并不是真的正确,尽管你可以通过编译器将变量视为静态的方式来推断变量.可能对于他使用它们的情况并不重要.
| 归档时间: |
|
| 查看次数: |
15464 次 |
| 最近记录: |