gpt4 book ai didi

ios - 自定义对象初始化器

转载 作者:行者123 更新时间:2023-12-01 19:12:28 25 4
gpt4 key购买 nike

我一直在为我的对象创建自定义初始化程序,因为与通过其他方式设置其变量相比,这是一种更好的做法。在这些初始化程序中,我通常设置对象的变量,然后返回对主init的调用。

因此,例如,在UIViewController子类中,我的代码如下所示:

-(id)initWithValue:(int)val {
self.value = val;
return [self initWithNibName:nil bundle:nil];
}

其中 value是属于该ViewController子类的整数,并且通常有更多的值。

但是,最近我开始首先设置self,因为我认为 self = [self init...]将替换该类的当前实例,因此我将失去该self实例。
所以,我开始做:
-(id)initWithValue:(int)val {
self = [self initWithNibName:nil bundle:nil];
self.value = val;
return self;
}

然后,我最近检查了原始版本,并意识到所有功能都可以正常运行,并且不需要进行更改。

所以,我的问题是这样的:
  • [super initWithNibName:bundle:]的作用是什么导致它创建一个对象但不替换原始对象?
  • 两个版本中的一个是否比另一个版本要好?或者它们都是等效的?如果一个更好,应该使用哪个?

  • 提前致谢!

    最佳答案

    您编写的第一个代码不会存储value,因为在创建对象之前,您尝试存储数据。
    但是,第二个代码需要进行一些小的修改才能更好地进行实践,即像这样...

    -(id)initWithValue:(int)val {
    self = [self initWithNibName:nil bundle:nil];

    if(self)
    _value = val;

    return self;
    }

    希望这对您有用... :-)

    关于ios - 自定义对象初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15492547/

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