在Objective-C中,为什么要检查self = [super init]是否不为零?

贾萨里安

我有一个关于在Objective-C中编写init方法的一般问题。

我到处都可以看到(Apple的代码,书籍,开源代码等),init方法应该在继续进行初始化之前检查self = [super init]是否不为零。

用于init方法的默认Apple模板是:

- (id) init
{
    self = [super init];

    if (self != nil)
    {
        // your code here
    }

    return self;
}

为什么?

我的意思是init什么时候会返回nil?如果我在NSObject上调用init并返回nil,那么一定要搞砸了,对吧?在那种情况下,您甚至不编写程序...

类的init方法返回nil真的很常见吗?如果是这样,在什么情况下,为什么?

肯达克

例如:

[[NSData alloc] initWithContentsOfFile:@"this/path/doesn't/exist/"];
[[NSImage alloc] initWithContentsOfFile:@"unsupportedFormat.sjt"];
[NSImage imageNamed:@"AnImageThatIsntInTheImageCache"];

... 等等。(注意:如果文件不存在,NSData可能会引发异常)。在很多地方,当出现问题时,返回nil是预期的行为,因此,出于一致性考虑,几乎所有时间都检查nil是标准做法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

为什么super().__ init__没有自我引用?

来自分类Python

为什么在多次继承中执行Base .__ init __(self)而不是super().__ init __()时会跳过__init__?

来自分类Dev

如何检查WkWebView是否在Objective-C中完成加载?

来自分类Dev

为什么我不能在Swift中的UIViewController上调用默认的super.init()?

来自分类Dev

在Rails快捷方式中检查是否非零且不为空?

来自分类Dev

检查变量是否不是nil并且在ruby中不为零

来自分类Dev

什么时候调用Python的super().__ init __()?

来自分类Dev

检查python中的值是否为零或不为null

来自分类Dev

如何在Objective-C中检查对象是否为零?

来自分类Dev

super.init调用未初始化属性“ self。*”

来自分类Dev

如何在Swift 2中检查NSDictionary是否不为零

来自分类Dev

在super.init中引用self

来自分类Dev

如何检查不为零

来自分类Dev

在super和init括号内具有参数之间有什么区别.... super().__ init __()

来自分类Dev

为什么self = [super init]确保单例模式?

来自分类Dev

在super中定义的常量不能在子类的super.init中使用?

来自分类Dev

为什么Visual Studio Code会在派生类中插入“ return super().__ init __(self)”?

来自分类Dev

是否有必要在python中显式调用super().__ init __()?

来自分类Dev

为什么在孩子的init方法中使用Python super?

来自分类Dev

为什么在“ super(A,self)”中,对象先于“ self”?

来自分类Dev

为什么在子类的init方法实现中不需要[super alloc]?

来自分类Dev

Freemarker检查变量是否存在并且不为零

来自分类Dev

Objective C故事板为什么ParentViewController为零

来自分类Dev

Objective-C不为NSPopUpButton执行更改方法

来自分类Dev

检查自定义类是否不为零--- Swift正在将其转换为UInt8

来自分类Dev

在objective-c的[super init]之前做一些事情

来自分类Dev

只要init调用[super init],在Objective C自定义init方法中调用[self init]是否可以?

来自分类Dev

Swift super.init() - 属性未在 super.init 调用中初始化

来自分类Dev

为什么 super().__init__ () 的行为与 Python 派生类中的 super().override() 不同?

Related 相关文章

  1. 1

    为什么super().__ init__没有自我引用?

  2. 2

    为什么在多次继承中执行Base .__ init __(self)而不是super().__ init __()时会跳过__init__?

  3. 3

    如何检查WkWebView是否在Objective-C中完成加载?

  4. 4

    为什么我不能在Swift中的UIViewController上调用默认的super.init()?

  5. 5

    在Rails快捷方式中检查是否非零且不为空?

  6. 6

    检查变量是否不是nil并且在ruby中不为零

  7. 7

    什么时候调用Python的super().__ init __()?

  8. 8

    检查python中的值是否为零或不为null

  9. 9

    如何在Objective-C中检查对象是否为零?

  10. 10

    super.init调用未初始化属性“ self。*”

  11. 11

    如何在Swift 2中检查NSDictionary是否不为零

  12. 12

    在super.init中引用self

  13. 13

    如何检查不为零

  14. 14

    在super和init括号内具有参数之间有什么区别.... super().__ init __()

  15. 15

    为什么self = [super init]确保单例模式?

  16. 16

    在super中定义的常量不能在子类的super.init中使用?

  17. 17

    为什么Visual Studio Code会在派生类中插入“ return super().__ init __(self)”?

  18. 18

    是否有必要在python中显式调用super().__ init __()?

  19. 19

    为什么在孩子的init方法中使用Python super?

  20. 20

    为什么在“ super(A,self)”中,对象先于“ self”?

  21. 21

    为什么在子类的init方法实现中不需要[super alloc]?

  22. 22

    Freemarker检查变量是否存在并且不为零

  23. 23

    Objective C故事板为什么ParentViewController为零

  24. 24

    Objective-C不为NSPopUpButton执行更改方法

  25. 25

    检查自定义类是否不为零--- Swift正在将其转换为UInt8

  26. 26

    在objective-c的[super init]之前做一些事情

  27. 27

    只要init调用[super init],在Objective C自定义init方法中调用[self init]是否可以?

  28. 28

    Swift super.init() - 属性未在 super.init 调用中初始化

  29. 29

    为什么 super().__init__ () 的行为与 Python 派生类中的 super().override() 不同?

热门标签

归档