Objective-C未知すぎて面白い。
Empty projectを作成。
とりあえずapplicationメソッドの中に以下を埋め込んでみた。
UIAlertView *alert = [[UIAlertView alloc]init]; alert.title = @"完了確認"; alert.message = @"設定しました"; [alert addButtonWithTitle:@"了解"]; [alert show];
うん、普通に動く。次はこれを関数化してみる。
-(void)showAlert { UIAlertView *alert = [[UIAlertView alloc]init]; alert.title = @"完了確認"; alert.message = @"設定しました"; [alert addButtonWithTitle:@"了解"]; [alert show]; }
で、これをこんなかんじで読み出す。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; showAlert(); //ココで呼び出す return YES; }
Implicit declaration of funtion 'showAlert' is invalid
っていうエラーが出た。プリコンパイラ(?)に読ませないといけないのだろう。(C++でいう関数のプロトタイプ宣言)
AppDelegate.hに以下を追加。
-(void)showAlert;
ちなみに関数の前の-とか+とかは意味があるっぽい。
実行するも、ダメ。「メソッド名()」では呼び出せないようです。
実装ファイルを眺めると基本的にインスタンスメソッドで呼び出してるようなので真似してみる。
self.showAlert;
動いた。でもウォーニングが出てる。
Property access result unused
らしい。
なんか思い出した。カッコでメソッドを呼び出せることを。
[self showAlert];
に変えたらウォーニングも消えて実行できた。
ということで出てきた疑問としては、
(1) [オブジェクト メソッド名] の呼び出しと、
インスタンス名.メソッド の呼び出しは何が違うのか
(予想)[オブジェクト メソッド名]の呼び出しは直接メソッド?
インスタンス名.メソッド の呼び出しはアクセサメソッド?(2)ヘッダファイルでの宣言、-と+はどう違うのか
(答)
+はクラスメソッド、-はインスタンスメソッド
http://www.atmarkit.co.jp/fcoding/articles/objc/03/objc03b.html(3)ヘッダファイルにおける@interfaceの意味 Javaでいうインターフェース実装と同じ事なのか