繁体   English   中英

[矩形类]中使用的类方法

[英]Class method used in [Rectangle class]

在[矩形类]中使用的“类”方法是什么? 是否创建Rectangle的实例? 我以为那是

Rectangle *aRectangle = [[Rectangle alloc] init]. 

为什么/何时使用[矩形类]?

这可能是[Rectangle class]的两个最常见的用法:

  1. 可以使用[Rectangle class]来检查对象是否是的一个实例Rectangle (或子类的实例Rectangle ):

     if ([object isKindOfClass:[Rectangle class]]) { Rectangle *rect = (Rectangle *)object; // ... use rect } 

    但是,如果您只发送一条消息,最好检查对象是否理解您要发送的消息:

     if ([object respondsToSelector:@selector(area)]) { double area = [object area]; // etc. } 
  2. 您可以使用class对象创建该类的实例:

     Class rectangleClass = [Rectangle class]; Rectangle *rectangle = [[rectangleClass alloc] init]; 

    你为什么想这么做? 好吧,如果您在要创建类的位置(在代码中)显式知道了该类,则不会。 例如,您只需要说[[Rectangle alloc] init]

    但是考虑一下UIView 每个UIView都会创建和管理一个CALayer 默认情况下,它创建CALayer的实例,但是您可能希望视图使用CAShapeLayer (示例)CAGradientLayer (示例)代替。 您需要一种方法来告诉UIView创建其他类的实例。

    您可以通过覆盖layerClass类方法来告诉您的UIView子类要创建哪种层:

     @implementation MyShapeView + (Class)layerClass { return [CAShapeLayer class]; } 

    当需要使用MyShapeView创建其图层时,它将发送自身layerClass并创建它返回的任何类的实例。 该代码可能看起来像这样:

     @implementation UIView { CALayer *_layer; } - (CALayer *)layer { if (_layer == nil) { _layer = [[[self layerClass] alloc] init]; _layer.delegate = self; } return _layer; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM