如何知道哪个初始化程序是指定的初始化程序?

问题描述:

如何知道哪个初始化程序是任何类的指定初始化程序? 我猜测这是一个需要最多参数的人,但可能有时候这是不正确的。如何知道哪个初始化程序是指定的初始化程序?

+0

“指定初始化程序”是什么意思? init是标准。 – shawnwall 2011-05-27 01:03:02

+1

@shawnwall:指定的初始化程序是所有其他init ...方法调用的init ...方法。例如。对于'UIView'和'NSView',这是'initWithFrame:'(它在文档中提到过)。请参阅[这里](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html#//apple_ref/doc/uid/TP30001163-CH22-106376)了解更多详情 – omz 2011-05-27 01:06:19

omz的答案可以更加明确地说明:框架类的文档将指定哪个是指定的初始化程序。有必要知道指定的初始化程序是为了编写适当行为的子类。子类的D.I.必须打电话给超级的D.I.以确保它被正确初始化。

然而,你对最多参数的猜测是有根据的。苹果实际上表示它是经常是 D.I.在几个地方。

Cocoa Core Competencies

一类的初始化,它利用初始化参数的全套通常是指定的初始化。

Cocoa Fundamentals

某些子类提供了提供缺省值到需要的初始化参数完全互补的初始化便利初始化。这个初始化器通常是指定的初始化器,它是一个类的最重要的初始化器。

+0

谢谢。一如既往,答案在文档中! – lampShade 2011-05-27 02:16:24

+0

@lampShade::)一如既往。除Cocoa之外的其他框架_应该指定指定的初始化器,如果它们打算用户子类。如果他们没有这样指定,那么得到一个新的框架!乐意效劳! – 2011-05-27 02:30:49

如果不查看源代码(不可能用于系统框架)或文档(可能是超类),您无法真正了解这一点。

+0

嘿,你写了新闻架!我喜欢那个应用程序。我每天早上都会阅读我的Feed。不错的工作! – lampShade 2011-05-27 01:11:04

从BigNerdRanch iOS的编程书籍:

*指定初始化要求在做任何事情之前超类的指定初始化(直接或间接)。

* 任何其他初始化程序调用该类的指定初始值设定项(直接或间接)。

*如果一个类声明了一个与它的父类不同的指定初始化方法,则必须重写超类的指定初始化方法来直接或间接地调用新的指定初始化方法。

Conway,Joe; Hillegass,亚伦; Keur,Christian(2014-02-14)。 iOS编程:大书呆子牧场指南(第4版)(大书呆子牧场指南)(Kindle Locations 1906-1910)。皮尔逊教育。 Kindle版。