Когда у экземпляра вызывается метод -dealloc? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть экземпляр класса со строгим свойством SomeClass, на который ссылается только этот единственный экземпляр. В какой-то момент это сильное свойство перезаписывается вновь созданным экземпляром, который назначен этому сильному свойству.

@implementation SomeClass

- (instancetype)init;
{
     static NSInteger idx = 0;
     NSLog(@"I am %", idx++);

     self = [super init];
     return self;
}


- (oneway void)dealloc;
{
   NSLog("bye"); 
}
@end

Затем в классе, содержащем ссылку:

@property (nonatomic, strong) SomeClass *prop;

... тогда

self.prop = [[SomeClass alloc] init];   /// first time assigned

... а затем

self.prop = [[SomeClass alloc] init];   /// second time assigned

Обычно последовательность:

  • НОВЫЙ экземпляр выделяется (вызывая его custom -init *)
  • старый экземпляр освобождается (вызывая его -dealloc)

Вывод будет выглядеть:

 I am 0
 I am 1
 bye

Но возможно ли, что последовательность обратная?

Есть ли возможность получить такой вывод?:

 I am 0
 bye
 I am 1

Например, если метод SomeClass -init выполняет какую-то сложную для CPU задачу, но все еще в том же / главном потоке?

1 Ответ

0 голосов
/ 26 апреля 2019

В строке

self.prop = [[SomeClass alloc] init];

материал справа от знака равенства происходит перед фактическим назначением. Нет вопроса об освобождении существующего объекта до назначения. Таким образом, «Я ...» будет напечатан до того, как возникнет вопрос об освобождении существующего объекта.

...