我应该在哪里初始化目标c中的variables?

在目标c中,我是否应该覆盖init方法来初始化我的variables? 如果variables是属性,我仍然可以通过它们来设置它们的初始值?

在目标c中,我是否应该覆盖init方法来初始化我的variables?

是。 具体来说,指定的初始化程序。

你的子类也可以指定另一个构build阶段(例如viewDidLoad)。 另外,对象的内存在被分配时被归零,所以你不需要明确地将它们设置为0 / nil(除非你发现它更可读)。

如果variables是属性,我仍然可以通过它们来设置它们的初始值?

您应该避免使用对象的实例方法/访问器,并直接在部分构造的状态(特别是初始值设定项和dealloc)中访问ivars。 有一些副作用,你会想避免 – 例如在这里 ;

你可以在视图控制器的viewDidLoad方法中初始化你的variables。

在类接口中声明的variables将被自动初始化为默认值,0表示整型值,nil / NULL表示类和指针。 如果你需要初始化variables为其他值,那么你需要覆盖你的类的保证入口点。 例如,一个自定义的类从NSObjectinheritance,你会简单地覆盖init 。 如果您正在使用从NIB文件加载的视图控制器,那么您可以覆盖initWithCoder:– awakeFromNib 。 你应该总是检查你从哪个类inheritance的文档,并find该类的指定初始值设定项。 有时你需要设置一个通用的初始化方法,并从各种初始化器中调用它。 另外,如果你有一个variables,也是一个属性,build议你应该设置属性,而不是直接的variables。

我应该覆盖init方法来初始化我的variables?

实例variables:是的,尽pipe它们已经默认初始化为0 / nil / false了。

如果variables是属性,我仍然可以通过它们来设置它们的初始值?

是的你可以。 苹果build议反对它,因为有一个危险的子类已经覆盖设置访问者做一些意想不到的事情。 在实践中,这很less是一个问题。