gpt4 book ai didi

Objective-C:是否应该在 .h 中声明 init 方法?

转载 作者:太空狗 更新时间:2023-10-30 03:22:03 25 4
gpt4 key购买 nike

首先,据我了解,Objective-C中的init,在功能上类似于Java中的构造函数,用于初始化实例变量和准备一个类(class)做一些工作。这是正确的吗?

我知道 NSObject 实现了 init,因此它不需要在任何 .h 文件中声明。

但是如何为给定类自定义 init 实现,例如:

(id) initWithName:(NSString *) name

应该将这样的声明列为 .h 的一部分,还是没有必要?是约定俗成还是有其他的道理?

最佳答案

init 绝不类似于 Java/C++ 中的构造函数。构造函数总是在创建对象时执行。但是 init 的执行取决于你。如果您在 alloc 之后不发送 init 消息,那么它将不会执行。

// init does not execute here
MyObject *obj = [MyObject alloc];

如果您从 NSObject 派生,这将毫无问题地工作,因为 NSObjectinit 什么都不做。

你不需要在头文件中添加init,因为它继承自NSObject,但你需要添加自定义的init方法(不是继承的)头文件。请注意,init 方法只是具有命名约定的普通方法,但在技术上与其他方法没有区别。

如果您没有在头文件中指定您的自定义 init 方法,而是将该消息发送给对象,编译器将生成警告。不会有编译错误。因此,如果您决定忽略该警告,那么您也可以从 header 中省略它。但是如果该方法没有实际实现,您将遇到运行时崩溃。所以最好在头文件中添加所有不继承的方法。

关于Objective-C:是否应该在 .h 中声明 init 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749628/

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