2016-03-10 49 views
0

假設我們有一個從UILabel繼承一個類的定製lib目錄下:防止自定義類

//MyLibCustomLabel.h 
@interface MyLibCustomLabel : UILabel 

MyLibCustomLabel被鏈接到一個UILabel在.xib文件和文本填充的.xib。

這種定製LIB被集成在具有CategoryUILabel類的一個項目,其具有修改UIlabel的文本

//UILabel+UILabelAdditions.h 
@interface UILabel (UILabelAdditions) 


//UILabel+UILabelAdditions.m 
@implementation UILabel (UILabelAdditions) 

- (void)awakeFromNib { 
    [super awakeFromNib]; 

    [self prependText]; 
} 

-(void)prependText { 
    NSString *newText = [NSString stringWithFormat:@"blabla + %@", self.text]; 
    self.text = newText; 
} 

最後,有一個修改非期望在MyLibCustomLabel的方法。

在這兩個自定義類和類別的情況在類中使用,是爲了保護MyLibCustomLabel從任何的UILabel類的方法嗎?

這樣MyLibCustomLabel不能以不希望的方式被改變,因此沒有修改在集成它的項目做。

感謝您的幫助!

回答

1

沒有什麼可以做,以「保護」一類被定義的可能類別。

但請注意,您顯示例子UILabel類是無效的。類別絕不能嘗試覆蓋現有的方法,也不要嘗試調用super方法。這種行爲沒有定義,不能保證按照希望工作。

換句話說,該類別的awakeFromNib方法是一個壞主意,不應該做的。這樣的事情只應該在基礎類而不是類別中嘗試。

+0

感謝您的回答。我根據我見過的東西做了這個例子。在我身邊,我試圖「保護」MyLibCustomLabel。你有點確認我的恐懼,那是不可能的。我會留下多一點的問題來收集其他意見,但您正在尋找答案。再次感謝 – Niko

+0

這樣想。類別只能用於將新方法添加到您無權訪問的現有類中。永遠不要使用類別來改變類的行爲。但是,如果開發人員以錯誤的方式編寫類別,並最終導致圖書館中的類出現問題,那麼編寫不良類別的開發人員就會出錯,他們將承擔後果。我根本不用擔心。 – rmaddy

+0

是的,我知道,但我首先嚐試了所有可能的事情......你知道蘋果公司是否有某種官方指導方針顯示你在說什麼?所以,我可以把它送到了一個有關... ^^」 – Niko

相關問題