Что ж, это предупреждает вас, что вы присваиваете значение, которое должно быть выпущено в конце охватывающей области, которая оказывается следующей строкой. Вот так будет выглядеть ваш init
после того, как ARC добавит в него свою магию:
-(id)init
{
if ( ( self = [super init] ) )
{
progressEnergy = [[progress alloc] init];
[progressEnergy release]; ///< Release progressEnergy since we've hit the end of the scope we created it in
}
return self;
}
Так что ваш progressEnergy
теперь очень вероятно (хотя и не обязательно) быть висящим указателем.
Изменить определение свойства с assign
на strong
:
@property (strong) progress* progressEnergy;
В этом случае ваш init
метод будет выглядеть следующим образом:
-(id)init
{
if ( ( self = [super init] ) )
{
progressEnergy = [[progress alloc] init];
[progressEnergy retain]; ///< Since it's a strong property
[progressEnergy release]; ///< Release progressEnergy since we've hit the end of the scope we created it in
}
return self;
}
На самом деле, он вызывает objc_storeStrong
вместо вызова retain
, как я показал, но по сути это сводится к retain
в этом случае.