Objective c Obj-C,在';自我';未设置为';[(超级或自我)初始化…]';
我知道不久前我问了一个类似的问题,但我还是有点不确定。同样的事情发生在好几个地方 “self”未设置为“[(super或self)init…]”的结果时使用的实例变量 A B C 对于A区,这是正确的吗Objective c Obj-C,在';自我';未设置为';[(超级或自我)初始化…]';,objective-c,xcode,cocoa-touch,analyzer,Objective C,Xcode,Cocoa Touch,Analyzer,我知道不久前我问了一个类似的问题,但我还是有点不确定。同样的事情发生在好几个地方 “self”未设置为“[(super或self)init…]”的结果时使用的实例变量 A B C 对于A区,这是正确的吗 self = [self init]; if( self != nil ) { 和B&C - (id) initWithFrame:(CGRect)frame { super = [super initWithFrame:frame] if(super != nil) {
self = [self init];
if( self != nil )
{
和B&C
- (id) initWithFrame:(CGRect)frame {
super = [super initWithFrame:frame]
if(super != nil)
{
一般来说,你应该写:
self = [super init...]; // Potentially change "self"
if (self) {
something = x;
another = y;
}
return self;
这是因为在某些情况下,
init
可能不会返回原始的self
值。这是一个问题吗?如果是这样的话,问题是什么?如果你写了子类,请使用SuperThank,因为你的答案清晰而没有技术性。。。为什么self=[super
而不是self=[self
?如果您要调用的init…
版本最终执行了[super init…]
调用,您可以使用self=[self
,在某些情况下可能需要这样做。(事实上,如果您的init
在库类的某个类别中,这几乎是强制性的。)但是您需要确保super
版本最终会被调用,否则您的对象将不完整。
self = [self init];
if( self != nil )
{
- (id) initWithFrame:(CGRect)frame {
super = [super initWithFrame:frame]
if(super != nil)
{
self = [super init...]; // Potentially change "self"
if (self) {
something = x;
another = y;
}
return self;