art*_*vin 14 runtime objective-c ios
我有一个问题,这是代码:
@interface MyFoo : NSObject {
NSString *nameStr;
}
@end
@implementation MyFoo
- (id)init {
self = [super init];
if (self) {
self->nameStr = [@"some value of the string that is set right into the private ivar" copy];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
问题是:忽略所有C++规则,忽略内存转储漏洞,为什么我不应该使用这样的箭头操作符语法?在Apple文档中是否存在一个规则,它表明它是不正确的,因为在将来的类中可能表示与运行时等结构的指针不同?
提前致谢!
rma*_*ddy 17
使用self->someIvar方法相同someIvar.这没错,但也不需要.
我使用箭头符号的唯一一次是执行,copyWithZone:所以我可以复制每个没有属性的ivars.
SomeClass *someCopy = ...
someCopy->ivar1 = ivar1; // = self->ivar1
someCopy->ivar2 = ivar2; // = self->ivar2
Run Code Online (Sandbox Code Playgroud)
你在哪里看到任何说不应该使用这种箭头操作符语法的东西?
仅在 ivar 名称上使用箭头符号来访问属性并不能保证它们将被保留、分配或等等......因为您正在指导访问 ivar 而不是调用和设置属性中使用的 getter 方法。
例子:
@interface MyFoo : NSObject {
}
@property(nonatomic,retain) NSString *nameStr;
@end
@implementation MyFoo
- (id)initWithString:(NSString *)name {
self = [super init];
if (self) {
self->nameStr = name; // will not be retained
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
对于已经是答案的 ivar 变量,没有任何问题。
| 归档时间: |
|
| 查看次数: |
5698 次 |
| 最近记录: |