objective-cの勉強
こんにちは、even_ekoです。
今日はobjective-cについて色々と学んだので、そのことについてまとめます。
今日、学んだのは以下の内容です。
- カテゴリ
- デリゲート
- id型
カテゴリ
objective-cにはカテゴリという概念があります。これにより、大きなクラスを複数のファイルに記述したり、既存のクラスを拡張したりできます。
ためしに、NSObjectを拡張してみます。
NSObject+.h
#import <Foundation/Foundation.h> @interface NSObject (_) -(void) checkInstance; -(void) checkClass; @end
NSObject+.m
#import "NSObject+_.h" @implementation NSObject (_) -(void) checkInstance { NSLog(@"extention is success in instance"); } +(void) checkClass { NSLog(@"extension is success in class"); } @end
これで、NSObject+.hをimportすればcheckInstanceとcheckClassを呼び出すことができます。
iPhone用の空のアプリケーションとして、作ってみたので参考にしてみて下さい。iseki-masaya/Objective-C_category · GitHub
デリゲート
デリゲートを用いると、あるクラスで起きたイベントの処理を別のクラスで実装できます。C#には言語自体に組み込まれていますが、Objective-Cには組み込まれていません。
プロトコルを使用することで、デリゲートの動作ができます。なので、Objective-Cの場合はデリゲートはデザインパターンのひとつになります。
プロトコルは、javaのインターフェースに似たようなものです。インターフェースとの違いは、@optionalを使うことで実装しなくても良いメソッドも用意できるという点です。
id型
id型はオブジェクト全般を表す型です。
使い方は様々あります。下の例は、selfのsubviewの中からUIViewのみを取り出す処理です。
for (id object in self.view.subviews) { if ([object isKindOfClass:[UIView class]]) { UIView *vw = object; vw.frame = CGRectMake(0, 0, 0, 0); } } }