2016-06-23 13 views
0

UIImageサブクラスMyImageを作成しました。 MyImageは、当初実装したすべてのメソッドには明らかに応答しますUIImage。私はのような実装を作成しようとしObjective Cのスーパークラスからサブクラスを初期化します

- (MyImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets; 

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets; 

:私は、例えばMYIMAGEのようなメソッドを再宣言して、完全に、UIImageの実装を非表示にしたいと思います

- (MyImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets { 
    UIImage *original = [super resizableImageWithCapInsets:capInsets]; 
    MyImage *result = [[[self class] alloc] initWithUIImage:original]; 
    return result; 
} 

- (id) initWithUIImage:(UIImage *)image { 
    // HOW TO IMPLEMENT THIS METHOD??? 
} 

けどinitWithUIImageメソッドで停止しました。どのようにして構図を使わずにこのような行動を達成できますか?

+2

あなたのクラスを[proxy](https://en.wikipedia.org/wiki/Proxy_pattern)にすることをお勧めします。この方法で、必要なメソッドだけを公開することができます。 –

答えて

0

ここでの問題は単純であり、それは「嫌がらせ」と呼ばれています。

Inaritanceはしませんが、UIImageを所有するいくつかのクラスを提供してください。それはより簡単でよりrelialebleになります。

もう1つの問題は、あなたが何かを変更する必要がある理由を説明していないということです。UIImage!私はprety確かにyuoは簡単な方法でいくつかの単純な問題を解決しようとしています。

+1

私たちは別の問題を抱えています....私はその継承と呼ばれると思います... – AnthonyLambert

0

答えは、あなたがしようとしているように見えることはできないということです。 MyImageはUIImageであり、暗黙のうちにUIImageのすべてのメソッドとプロパティを持っています。新しいものを追加することはできますが、既存のものは削除しないでください。

UIImageはシステムAPI全体で使用されています。これを行うことで正確に何を達成しようとしていますか?

1

あなたはそうしたくありません。その何かを壊す危険性の高い不要なコードがたくさんあります。これらの方法を再宣言しないでください。あなたがそれをしたいという特別な理由はありますか?

関連する問題