当实例调用其 -dealloc 方法时?

When an instance has its -dealloc method called?

我有一个 class 实例,它具有很强的 属性 SomeClass,它仅被此单个实例引用。在某些时候,这个强 属性 被分配给这个强 属性 的新创建的实例覆盖。

@implementation SomeClass

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

     self = [super init];
     return self;
}


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

然后,在class持有参考:

@property (nonatomic, strong) SomeClass *prop;

...然后

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

...然后

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

通常情况下,顺序是:

输出如下:

 I am 0
 I am 1
 bye

但是,有没有可能顺序颠倒了?

有没有可能得到这样的输出?:

 I am 0
 bye
 I am 1

例如,如果 SomeClass -init 方法执行一些 CPU 繁重的任务,但仍在同一个/主线程中?

在行

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

等号右边的内容发生在实际赋值之前。在分配之前不存在释放现有对象的问题。因此,“I am ...”将在存在任何释放现有对象的问题之前打印出来。