以 NSArray 为例。如果我们查看类引用并查看初始化数组子部分,我们会看到这种方法:
-(instancetype)initWithObjects:(id)firstObj
因为我们正在创建NSArrays,所以我想创建一个NSArray类的对象并且有一个数组指针。
NSArray *array = [NSArray new];
我们打算调用initWithObjects:(id)firstObj
NSArray *array = [[NSArray alloc] initWithObjects:@[@"hello", @"world"]];
我对我可以传递的内容感到有点困惑。以下面的方法为例:
-(void)commentOnMediaItem:(Media *)mediaItem withCommentText:(NSString *)commentText;
我看到我需要传入一个mediaItem和一个NSString,但什么时候适合子类并创建自己的?
我想我的困惑在于,我只能访问头文件和面向公众的方法,而无需真正理解某些方法的实现。
最终,任何有关如何细分参考指南/文档以及提供技巧的顿悟的提示都将受到慷慨的赞赏。
答案 0 :(得分:1)
让我们从您所写的错误概念开始,作为您的理解。
这意味着实例类型已被[NSArray alloc]
替换
不,绝对没有。为了解释这一点,我们将介绍Objective-C的方法/消息语法。如果掌握方法语法,则可以轻松阅读文档。现在不要为我为什么用方法写 message 而烦恼。在帖子结束时会很清楚。
-(instancetype)initWithObjects:(id)firstObj
instancetype
- 返回方法的数据类型。这意味着返回类型与接收方的类型相同
initWithObjects:
- 方法签名。
id
- 方法参数的数据类型。 id
表示它可以是任何数据类型,它是一个对象
firstObj
- 方法参数
现在让我们看看[NSArray alloc]
做了什么。这意味着已创建NSArray
的对象并为其分配内存,但尚未初始化。
消息 - Objective-C使用消息传递作为调用方法的方法。消息被发送到接收器,接收器基本上是将具有相关方法实现的对象。
因此,当initWithObjects:
的消息发送到NSArray
的原始对象时,这意味着NSArray
类将实现此方法,一旦完成它将返回{{1}的对象1}}
对于初学者来说,消息传递有点难以理解,如果现在还不清楚,那么我建议您掌握好语言,然后尝试理解它。但请阅读Working with Objects的完整部分以获得清晰的图片。
学习Swift是否会同时提供帮助?
完全基于@Amadan的观点已经提到过。我个人觉得它会弄乱你的想法。先学习一种语言,然后了解其中的差异。