gpt4 book ai didi

macos - Cocoa 中的 Alloc 和 init

转载 作者:行者123 更新时间:2023-12-03 17:34:45 25 4
gpt4 key购买 nike

也许这是一个愚蠢的问题,但我真的很想弄清楚这个问题。

例如,我有以下设置:

// .h
@interface MyClass : NSObject
{
NSView *myView;
}

// .m

@implementation MyClass

-(void)someMethod
{

// WHAT IS THE DIFFERENCE BETWEEN THIS
myView = [[NSView alloc] init];

// AND THIS ?

myView = [myView init]; // assuming that myView was allocated somewhere earlier in init method
}

最佳答案

init 方法倾向于假设您只向每个对象发送 init 一次。

再次发送 init 到之前分配和初始化的 myView 将打破这个假设,导致内存泄漏并可能导致随后的奇怪行为。两者都是由您发送给 myView 的第二条 init 消息创建对象、添加观察者等(同一对象之前已设置)而产生的。

这就是 someMethod 中第二行的作用。

第一行创建一个新 View ,这是 alloc/init 一二拳的影响。此 View 与您输入 someMethod 的 View (如果有)是不同的对象,因此将 init 作为其创建的一部分发送到该对象不是问题。

记住:对象不是变量。 myView 是变量的名称;当我们说“myView”时,我们真正的意思是“myView 持有的对象”。

(牢记最后一段的概念,从头开始重新阅读这个答案可能是个好主意。)

关于macos - Cocoa 中的 Alloc 和 init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16229175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com