我们在 ARC 中创建对象的这两种方式有什么区别吗?

Is there any difference between these 2 ways we create objects in ARC?

我想知道:

之间实际上有什么区别吗?
UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.deleteButton = deleteButton;

和:

self.deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];

使用 ARC 时?

我看到很多人像第一种情况一样写了很多代码,但我相信第二种方式更短,更清晰和简洁。

不是 ARC 专家也不是这里的任何人,但我相信代码是相同的。当您分配给指针时,您正在分配指针指向的内存地址。你在顶部和底部的唯一一件事是在将内存地址分配给 self.deleteButton.

之前将其保存在本地指针中

is there actually any difference between

是的,但是,在编译器优化下,生成的二进制文件将是相同的。

UIButton *deleteButton,即UIButton __strong *deleteButton拥有对象的所有权。

对象已在当前自动释放池中注册,因为 buttonWithType: class 方法不是以 "alloc"、"new"、"copy" 或 "mutableCopy".

因此,

UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];

/*
 * The current Autorelease Pool has ownership of the object. retainCount=1
 * __strong deleteButton has ownership of the object as well. retainCount=2
 */

self.deleteButton = deleteButton;

/*
 * If self.deleteButton is strong property, it has ownership of the object too. retainCount=3
 * If self.deleteButton is weak property, it doesn't have ownership of the object. retainCount=2
 */