【问题标题】:What to use instead of "id" in Objective-c? [duplicate]在 Objective-c 中使用什么来代替“id”? [复制]
【发布时间】:2013-07-12 10:00:14
【问题描述】:

我看过一些 WWDC 视频,并注意到他们使用其他东西而不是 (id) 返回未知对象的类型。

但不幸的是,我忘记了关键字。
谁能告诉我为什么在返回某个对象时使用新事物而不是“id”?尤其是 init 和 class 方法?

【问题讨论】:

  • 它是实例类型。检查此问题以进行讨论:stackoverflow.com/questions/8972221/…
  • @vikingosegundo 这个评论怎么不是我的? :P
  • 啊,搞砸了我的决定:如果你再看一遍那个视频,我相信讲师会很友好地为你重复这些信息!
  • 肯定它不在“图书作者的 HTML、CSS 和 DOM”视频中,也不在主题演讲中。但是,嘿:"Modern Objective-c" 呢?
  • 但实际上它位于 "404: Advances in Objective-C" — 通过搜索 PDF 找到

标签: ios objective-c


【解决方案1】:

您是否正在寻找instancetype

【讨论】:

  • 也许您可以添加问题的“为什么使用它”部分? :)
  • @borrrden 我可以加入this link吗?
  • 太棒了!不幸的是,这使这个问题成为重复的......
  • @borrrden(我的回答是“仅链接”,我不喜欢:P)
  • 我真的认为这条规则不适用于@RobertHarvey。我的情况是,如果您取消链接,它会回答问题。事实上,这个问题原本只是一个关键词。在这种情况下,是否取消了链接并仅使用关键字更好?该链接纯粹是补充信息,对于回答问题并不重要,只是一个很好的接触。
【解决方案2】:

(id) 告诉编译器期待任何类型的对象。这对于您真的不知道会返回什么的方法是有意义的,例如NSArray-(id)objectAtIndex:。但是,在init 方法中,您知道将返回什么:对象类的实例或其子类。例如,[[NSArray alloc] init] 永远不会返回 UIButton

通过提供instancetype 而不是id,您可以告诉编译器期望什么样的对象。这意味着编译器可以帮助您防止错误。

查看此链接:http://nshipster.com/instancetype/。它会告诉你所有你需要知道的。

【讨论】:

  • 最好在你的回答中提供一个摘要。
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2016-11-08
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多