クラス - shirai/SwiftLearning GitHub Wiki
インターフェース部
目標
- インスタンス変数の宣言ができる
- プロパティの宣言ができる
- クラスメソッド/インスタンスメソッドの宣言ができる
わかったこと
- インスタンス変数の宣言
@implementation ViewController{
int _i;
}
- プロパティの宣言
@interface ViewController ()
@property(nonatomic)int i;
@end
- クラスメソッドの宣言
+(void)huga;
- インスタンスメソッドの宣言
-(void)hoge;
つぎにやること
- 学習記録まとめ
実装部
目標
- クラスメソッド/インスタンスメソッドが作成できる
- イニシャライザのオーバライドが安全に行える
わかったこと
クラスメソッド/インスタンスメソッドの作成
/// クラスメソッド:fuga
+ (void)fuga {
// 処理
}
/// インスタンスメソッド:hoge
- (void)hoge {
// 処理
}
イニシャライザのオーバーライド
- イニシャライザとは
- そもそもイニシャライザとは「init」という名前のメソッドである
- NSObjectクラスにおいて、オブジェクトの初期化ようメソッドとして定義されている
- オブジェクトをインスタンス化するためには
[[クラス名 alloc] init]
を明示的に実行する必要がある[[クラス名 alloc] init]
=[クラス名 new]
である
[]
が増えると見辛くなるので積極的にnew
を利用すること
- 指定イニシャライザ
- 指定イニシャライザは 「オブジェクトを初期化するために必要十分な引数を持ったイニシャライザ」 である
- すべてのクラスは、1つの指定イニシャライザをもち、その他のイニシャライザは全て指定イニシャライザ経由で初期化されなければならない
- 指定イニシャライザの以外のイニシャライザは、必ず指定イニシャライザ経由で初期化する
- 親クラスの指定イニシャライザは必ずオーバーライドする
- こうすることでサブクラスは指定イニシャライザをオーバーライドするだけで、全イニシャライザが呼び出されたときの処理を記述できます
わからなかったこと
- [] 理屈はわかったが、サンプルコードとして見た
if (self = [super init])
← このコードの意味がわからなかった
つぎにやること
- 調査
- 学習記録まとめ
継承
目標
- 任意のクラスを継承し、使用できる
- スーパークラスの呼び出しや、メソッドの関係性を理解できている
わかったこと
- クラスの継承
@interface クラス名 : 継承するクラス名
objective-cでは NSObject
を除く全てのクラスが、絶対になんらかのクラスを継承したクラスになっている
- スーパークラスの呼び出し
[super スーパークラスのメソッド名];
- メソッドの関係性
わからなかったこと
- メソッドの関係性とは何か
つぎにやること
- 調査
- 学習記録まとめ