实例的-dealloc方法何时调用?

时间:2019-04-26 15:43:33

标签: objective-c automatic-ref-counting

我有一个具有强属性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

通常,顺序为:

  • 获取新实例(调用其自定义-init *)
  • OLD实例被释放(调用其自定义-dealloc)

输出如下:

 I am 0
 I am 1
 bye

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

是否有可能获得这样的输出?

 I am 0
 bye
 I am 1

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

1 个答案:

答案 0 :(得分:0)

在线

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

等号右边的内容发生在实际分配之前。毫无疑问,要在分配之前取消分配现有对象。因此,在有任何关于分配现有对象的问题之前,将打印“我是...”。