目标c中的(覆盖)是什么

liv*_*v a 4 overriding objective-c

我下面就如何在iPhone创建一个酥料饼的教程在这里

(overrides)这段代码是什么:

@interface UIPopoverController (overrides)
  + (BOOL)_popoversDisabled;
@end

@implementation UIPopoverController (overrides)

  + (BOOL)_popoversDisabled 
  { 
     return NO;
  }

@end
Run Code Online (Sandbox Code Playgroud)

Jas*_*ues 5

这是一个客观C类.类是一种在类上提供额外方法的方法,它们在以下情况下很有用:

  • 使用特定于域的功能扩展库类.即提供一些对您的应用程序有用的额外功能.无论您是否拥有该类的源代码,这都有效.例如,您可以实现[NSString asCreditCard]方法或[UIColor applicationThemeColor].
  • 类别对于在复杂类中对相关功能进行分组也是非常有价值的.

Objective-C类别的限制是您无法在类别上定义其他ivars,因此也不能定义ivar支持的属性,尽管您可以使用关联引用轻松解决此问题- 允许您将对象链接到给定的运行时功能类.

关联参考文献

要在类别类中"伪造"属性或ivar,请使用以下命令:

定义"键"以引用关联的属性.

static char const* const carNamekey = "com.myObject.aKey"; 
Run Code Online (Sandbox Code Playgroud)

密钥不一定必须具有值,因为它是实际使用的对象的内存地址.

现在,实现属性:

- (void) setCar:(Car*)car 
{
    objc_setAssociatedObject(self, &carNamekey, car, OBJC_ASSOCIATION_RETAIN_NONATOMIC);     
}

- (Car*) car 
{
    return objc_getAssociatedObject(self, &carNamekey);
}
Run Code Online (Sandbox Code Playgroud)

如果您希望可以在类别的接口定义上添加@property声明,则邀请该类用户使用property-style(即class.property = xxx)语法.

类扩展

与Objective-C类别非常相似的另一个特性是类扩展.在类的实现块中定义了类扩展,如下所示:

@interface MyClass()
Run Code Online (Sandbox Code Playgroud)

有些人将这些称为"空类别",但这并不完全正确.与类别不同,类扩展允许您在类上定义其他属性和ivars,而无需使用关联引用.这对于创建只读属性,内部可写以及类似的东西很有用.

那里 - 现在你可能比很多人更了解类别:)