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)
这是一个客观C类.类是一种在类上提供额外方法的方法,它们在以下情况下很有用:
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,而无需使用关联引用.这对于创建只读属性,内部可写以及类似的东西很有用.
那里 - 现在你可能比很多人更了解类别:)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |