了解 Apple 开发人员参考文档
Posted
技术标签:
【中文标题】了解 Apple 开发人员参考文档【英文标题】:Understanding Apple Developer Reference documentation 【发布时间】:2016-04-19 15:47:51 【问题描述】:我看到了另一个关于此的问题 (Understanding how to use methods found in Apple Developer Reference documentation),它似乎因为不够具体而被关闭,所以我想问一个具体的问题,看看我是否能得到与他们相同的答案试图到达。
我对此比较陌生,希望能够更好地阅读 Apple 文档,但我无法立即知道我是如何知道这一点的 (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/#//apple_ref/occ/instm/NSArray/initWithObjects:count:):
- (instancetype)initWithObjects:(ObjectType)firstObj
变成(类似)这个(例如):
rssFeedURLs = [[NSMutableArray alloc] initWithObjects: url1, url2, nil];
我确信它一旦“点击”就很容易了,所以我想知道您是否可以给我任何帮助,以便我可以更轻松地从基本层面真正理解这一点。
我现在正在阅读编程书籍、教程、视频等,以继续深入了解基础知识。无论出于何种原因,我都对理解 Apple Docs 方法感兴趣,将其转换为实际代码。
感谢您的耐心和时间!
【问题讨论】:
如果您查看给定方法的“参数”部分,通常会更好地描述每个参数的作用/如何使用它。例如,对于initWithObjects:
,文档说“以 nil 结尾的以逗号分隔的对象列表。”——这对您的情况非常有用。不幸的是,这个问题仍然主要基于意见(每个人的学习方式不同),因此我将投票结束。
所以NSArray
是instancetype
,但是为什么他们把它放在()
中呢? initWithObjects
是方法。您将ObjectType
传递给它。这就是我想要完全理解的事情,如何在我前进的过程中向自己解释它
instancetype
是方法返回的值的类型(在这种情况下是一个新的NSArray
实例)。所有方法返回类型都包含在()
中,这只是obj-c 语法。 initWithObjects:
是方法的名称,ObjectType
是一个lightweight generic type,表示要存储在数组中的对象的类型。
那非常有帮助,抱歉我的问题不符合参数,也许它应该,但感谢你对它很好。作为后续行动,我将如何使这个问题不那么基于意见?我放了一个具体的例子,但这一定不是你要找的。再次感谢!
问题的问题在于无论示例多么具体,“我如何更好地理解 Apple 文档”的基本问题都是基于意见的。我不确定有没有办法让你的问题不基于意见。我建议尝试在 obj-c 中构建一个简单的应用程序,使用 SO 来回答您可能对代码有的任何特定问题/问题。只要确保它是on topic,并且在询问之前做一些研究:)
【参考方案1】:
你没有仔细阅读。其实有
- (instancetype)initWithObjects:(ObjectType)firstObj, ...;
在文档中。 ...
是可变参数。要理解这样的事情,你应该知道它到底是什么。因此,在这种情况下,需要理解语言特征。谈到ObjectType
,它是轻量级泛型,也是语言特性。
如果你想知道为什么url1, url2, nil
的末尾有nil
,你应该仔细阅读文档。来自你引用的
以 nil 结尾的以逗号分隔的对象列表。
所以,这里没有任何魔法。 总之,你需要两件事来更好地理解苹果参考
-
了解您使用的语言
仔细阅读,不漏一字
【讨论】:
所以NSArray
是instancetype
,但是为什么他们把它放在()
中呢? initWithObjects
是方法。您将ObjectType
传递给它。这就是我想要完全理解的事情,如何向自己解释。
instancetype
是语言功能。它告诉编译器,该方法将返回您调用它的类的对象。将一些东西放入()
是 ObjC 的基础——它是方法的返回类型(再次阅读您的数千个教程)。不,您没有将 ObjectType 传递给方法 - ***.com/a/30719796/5016443
感谢您的回复。这是指“再次阅读您的数千篇教程”?
不客气! “再次阅读你的数千个教程”是关于你的“我正在通过编程书籍、教程、视频等工作”。看起来你正在努力学习 Objective-C 基础知识,所以一定要获得更好的语言知识,而不是返回框架文档
哦,好吧,现在我看到你在开我的玩笑,我在第一次阅读时并没有意识到这一点。我会努力变得更好【参考方案2】:
在你使用示例的问题中:
- (instancetype)initWithObjects:(ObjectType)firstObj
(这应该是
- (instancetype)initWithObjects:(ObjectType)firstObj, ...
- 其余部分在文档中,但由于布局不佳,在下一行)
在随后的评论中你写道:
所以
NSArray
是instancetype
,但是为什么他们把它放在()
中呢?initWithObjects
是方法。您将ObjectType
传递给它。这就是我想要完全理解的事情,如何在我前进的过程中向自己解释它
您似乎还不熟悉 Objective-C 中的方法声明是什么样的,您应该通读 Apple 的 Method Declarations Indicate the Messages an Object Can Receive,其中解释了语法。
一旦您了解了如何声明自己的方法,那么阅读文档中的方法应该很容易。
但是,您选择了具有许多更高级功能的示例:
instancetype
- 不是很高级,但这是声明初始化或工厂方法的返回类型的相对较新的方法。请参阅 Apple 的 Adopting Modern Objective-C 以获得解释,或者仅将其用于所有初始化或工厂方法并了解为什么是后者。
ObjectType
- 这与 Apple 的新 轻量级泛型 有关。这是一个为与 Swift 交互而设计的轻度指定功能(请参阅Interacting with Objective-C APIs)。通常在阅读文档时,如果您看到 ObjectType
,您可以将其替换为 id
- 意思是“任何对象类型” - 以了解该方法。
firstObj, ...
- 这是 Objective-C 可变参数语法 - 其中方法采用可变数量的参数。文档中的参数描述将提供更多详细信息,在本例中为“以nil
结尾的对象的逗号分隔列表”。有关变量参数的更多详细信息,请参阅 Apple 的 Variable arguments in Objective-C methods。
就是这样,在一个示例中,您可能已经使用了您可能会看到的大多数高级功能。
HTH
【讨论】:
以上是关于了解 Apple 开发人员参考文档的主要内容,如果未能解决你的问题,请参考以下文章