Pie*_*ade 7 memory-management objective-c
从Apple有关内存管理的文档:
您不应该使用访问器方法来设置实例变量的唯一地方是init方法和dealloc.要使用表示零的数字对象初始化计数器对象,可以按如下方式实现init方法:
要允许使用非零计数初始化计数器,您可以实现initWithCount:方法,如下所示:
- initWithCount:(NSNumber *)startingCount {
self = [super init];
if (self) {
count = [startingCount copy];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
为什么不 ?
Jer*_*myP 16
看看我对这个问题的回答.
主要原因是因为子类可能会覆盖您的访问器并执行不同的操作.子类的访问器可能假设一个完全初始化的对象,即子类的init方法中的所有代码都已运行.事实上,当你的init方法运行时,它都没有.类似地,子类的访问器可能依赖于子类的dealloc方法没有运行.当你的dealloc方法运行时,这显然是错误的.
要扩展您的示例,如果您已经完成了
- initWithCount:(NSNumber *)startingCount {
self = [super init];
if (self) {
[self setCount: [startingCount copy]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
但是一个子类已经重写了setCount:除了设置你的count变量之外还做一些事情,你可能遇到麻烦了.
| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |