Obj-C, Instance variable used while 'self' is not set to the result of ''

I know I asked a similar question to this not long ago, but I’m still a little unsure about it. The same sort of thing happens in several places.

Instance variable used while ‘self’ is not set to the result of ‘[(super or self) init…]’

  • Will Appstore reviewers allow us to use dynamic library in iOS8?
  • Turning an iPhone or iPod into a wireless webcam
  • UIColor colorWithRed:green:blue: always produces black
  • Autolayout - intrinsic size of UIButton does not include title insets
  • Xcode 7, Obj-C, “Null passed to a callee that requires a non-null argument”
  • Height of iOS8 Today Extension using Only Auto Layout Gives Broken Constraints
  • 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
    

    For block A, is this correct

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

    And B & C

    - (id) initWithFrame:(CGRect)frame {
       super = [super initWithFrame:frame]
        if(super != nil)
       {
    

    Solutions Collect From Internet About “Obj-C, Instance variable used while 'self' is not set to the result of ''”

    Generally, you’re supposed to write:

    self = [super init...];  // Potentially change "self"
    if (self) {
        something = x;
        another = y;
    }
    return self;
    

    This is because init may not return the original self value in some cases.