簡體   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