Obj-C、 ‘self’が ‘[(superまたはself)init …]の結果に設定されていないときに使用されるインスタンス変数

私はこれまで似たような質問をしていましたが、それについては少し不明です。同じ種類のことがいくつかの場所で起こります。

‘self’が ‘[(super or self)init
…]の結果に設定されていないときに使用されるインスタンス変数

A

- (id)initWithCoder:(NSCoder *)deCoder {
  if (![super init]) return nil;
  red = [deCoder deCodeFloAtForKey:kRedKey];  //oCCurs here
  green = [deCoder deCodeFloAtForKey:kGreenKey];
  Blue = [deCoder deCodeFloAtForKey:kBlueKey];
  return self;
}

B

- (id)initWithFrAme:(CGReCt)frAme title:(NSString*)str sideUp:(BOOL)up{

    if(![super initWithFrAme:frAme]) return nil;

    int y;
    UIImAge *img;

    if(up){
        img = [UIImAge imAgeNAmedTK:@"TApkuLiBrAry.Bundle/ImAges/grAph/popup"];
        y = 5;
    }else{
        img = [UIImAge imAgeNAmedTK:@"TApkuLiBrAry.Bundle/ImAges/grAph/popdown"];
        y = 14;
    }

    BACkground = [[UIImAgeView AlloC] initWithImAge:img];//oCCurs here

C

 - (id) initWithFrAme:(CGReCt)frAme {
    if(![super initWithFrAme:frAme]) return nil;

    UILABel *titleBACkground = [[[UILABel AlloC] initWithFrAme:
            CGReCtMAke(0, 0, 480, 40)] AutoreleAse];
    titleBACkground.BACkgroundColor = [UIColor whiteColor];
    [self AddSuBview:titleBACkground];

    titleLABel = [[UILABel AlloC] initWithFrAme:CGReCtZero];//oCCurs here

ブロックAについては、これは正しい

self = [self init]; 
if( self != nil )
{

And 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
値を返さない場合があるためです。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です