Objective - c で親(継承しているクラス)のメソッドを [super メソッド名] でも [self メソッド名] よべると思うのですが違いは何があるのでしょうか??
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
objectivec
1@interface Parent : NSObject 2@end 3@implementation Parent 4- (void)both {NSLog(@"[parent] both");} 5- (void)onlyParent {NSLog(@"[parent] onlyParent");} 6@end 7 8@interface Child : Parent 9@end 10@implementation Child 11- (void)both {NSLog(@"[child ] both");} 12- (void)onlyChild {NSLog(@"[child ] onlyChild");} 13- (void)hoge 14{ 15 [self onlyParent]; 16 [super onlyParent]; 17 18 [self onlyChild]; 19 //[super onlyChild]; //存在しないのでエラー 20 21 [self both]; 22 [super both]; 23} 24@end
で、Childのhogeを呼び出す([[Child new] hoge]
)と、
//親にしか無いので、どちらの場合でも親のメソッドが呼ばれる [self onlyParent]; //=> [parent] onlyParent [super onlyParent]; //=> [parent] onlyParent //子にしか無いので、親のメソッドは呼べない [self onlyChild]; //=> [child ] onlyChild //[super onlyChild]; //存在しないのでエラー //どちらにもあるので、それぞれのメソッドが呼ばれる [self both]; //=> [child ] both [super both]; //=> [parent] both
こうなります。
投稿2017/09/07 03:07
編集2017/09/07 03:57総合スコア16731
0
オーバーライドしたメソッドが元の(親の)メソッドを呼ぶ時は必ず super を使います。
ObjectiveC
1- (void)viewWillAppear:(BOOL)animated { 2 [super viewWillAppear:animated]; // これはよく書きますが、 3 4 [self viewWillAppear:animated]; // これは自分自身呼ぶから死にます。 5 6 NSLog(@"呼ばれたよ"); 7} 8
この用途以外だとトリッキーなコードしかない気もします。
投稿2017/09/07 04:53
総合スコア1563
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/07 05:58