Apo*_*llo 5 oop objective-c ios objective-c-category
如果我有一个方法将动画附加到a UI Element,而不是将此方法的代码复制/粘贴到许多viewcontrollers,我可以创建一个class来保存方法,然后导入它吗?
我认为category在这个实例中使用a是没有意义的,因为我需要多个这个方法viewcontrollers,而a category是单个的扩展viewcontroller.
Wai*_*ain 18
类别是类的扩展,而不是类的特定实例.并且,类别对类所做的任何修改都可用于所有子类(与OOP中的类上的其他方法一样).
因此,如果您添加一个类别NSObject,基本上整个应用程序中的所有类都可以访问该类别中的方法 - 因此您需要非常小心在那里添加哪些方法.
在很多情况下,无论是添加类别还是辅助类都是个人偏好,两者都可以.
Dun*_*n C 12
2015年4月9日编辑
您有两个基本选择:
创建类别,或创建自定义子类.
类别允许您将方法添加到整个类,甚至是您没有源代码的类.类别对于向系统类中创建对象的系统类添加新方法特别有用,在这种情况下,您无法更改内容以创建自定义子类.
您可以将类别添加到基类(如UIView),并且您添加的方法可用于该类及其所有子类.因此,您可以向UIView添加动画类别,然后所有UIView对象(包括图像视图,按钮,滑块等)都将获得该类别中定义的方法.
类别可以帮助您解决Objective-C中没有多重继承这一事实.(在上面向UIViews添加动画行为的示例中,您不能创建UIView AnimationView的子类,然后创建一个继承UITextView和AnimationView的UITextView,并创建一个继承自AnimationView的UIImageView.)
类别有几个重要的限制:
它们无法真正覆盖已有方法的代码.(他们可以,但你不能调用超级实现,如果有多个类别使用相同方法的实现,结果是未定义的,所以你不应该这样做.)
类别无法将新实例变量添加到它们扩展的类中.(有很多方法可以使用称为关联存储的技术来模拟这种情况,但这超出了本文的范围
自定义子类可以覆盖现有方法.它还可以添加新方法,属性和实例变量.但是,它无法像类别一样向现有子类添加方法.
| 归档时间: |
|
| 查看次数: |
16365 次 |
| 最近记录: |