【问题标题】:What is this syntax when I was attempting to override a getter?当我试图覆盖 getter 时,这种语法是什么?
【发布时间】:2013-10-30 02:41:02
【问题描述】:

当我试图覆盖 getter 时,这个语法是什么?

我只是想了解更多关于属性如何在 Objective-C 中工作的信息。这是我的财产:

@property (nonatomic, strong) UIView *myView;

当我尝试覆盖 getter 时,我会得到以下帮助:

-(void)getMyView:(<object-type> **)buffer range:(NSRange)inRange
{

}

我知道我可以用这个:

-(UIView *)myView
{

}

但我只是好奇以前的方法是做什么的,为什么会出现等等。感谢您的帮助!

【问题讨论】:

  • 我不确定这与您要问的内容有关...但getters 不应接受任何参数,也不应返回void。具有void 返回类型的方法不会得到任何东西。
  • 当您的资源类型为MyProperty 并命名为myProperty 时,是否会发生这种情况?无论您看到什么,都可能与您正在使用的特定类有关...
  • 我的属性也一样。现在我也很好奇!
  • @nhgrif 是的,getter 不应该返回 void 并且不接受任何参数是有道理的。我更改了属性,因此更清楚这不是特殊情况。而我所在的类继承自 NSObject。
  • 一个很好的例子,说明 SO 是关于学习的。我不知道这种结构的存在,现在我正在阅读整个指南。谢谢你的好问题。

标签: ios objective-c properties


【解决方案1】:

它被称为“Getter Indexed Accessors”,如 Key-Value Coding Programming Guide 中所述

来自文档:

为了支持对有序对多关系的只读访问,请实现以下方法:

-countOf&lt;Key&gt; 必需。这类似于 NSArray 原始方法计数。

-objectIn&lt;Key&gt;AtIndex:-&lt;key&gt;AtIndexes: 必须实现其中一种方法。它们对应于 NSArray 方法 objectAtIndex:objectsAtIndexes:

-get&lt;Key&gt;:range: 实现此方法是可选的,但会提供额外的性能提升。该方法对应NSArray方法getObjects:range:

您可以出于性能原因实现此类方法,如指南中所述

如果基准测试表明需要改进性能,您也可以实施-get&lt;Key&gt;:range:。此访问器的实现应在作为第一个参数给出的缓冲区中返回落入第二个参数指定范围内的对象。

举个例子

- (void)getEmployees:(Employee * __unsafe_unretained *)buffer range:(NSRange)inRange {
    // Return the objects in the specified range in the provided buffer.
    // For example, if the employees were stored in an underlying NSArray
    [self.employees getObjects:buffer range:inRange];
}

【讨论】:

  • 太棒了!感谢您为我搜索它! ;)
  • 我花了一段时间才得到正确的查询 :) 不客气
  • 但是没有这些配件我还能走老派的路吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2016-01-21
相关资源
最近更新 更多