iPhoneアプリ開発を始めて分からなかった疑問点まとめ

仕事でiPhoneアプリ開発をやるようになって半年が経ちました。面白いね！
その初期の頃に書いていたメモ書きが見つかったので、それを見返しながらまとめてみました。
新しく始める方のお役に立てれば！


##iPhoneアプリ開発の基本

###Q. やり方が分からない
A. とりあえず公式読むのがおすすめ。量が多くて躊躇するけど正しい。
　　最初に読むなら、以下のリンクの「初めての iOS アプリケーション」。
　　[日本語ドキュメント - Apple Developer](https://developer.apple.com/jp/devcenter/ios/library/japanese.html)

　　それでも分からないって時は、困った時のドットインストール！これ以上に分かりやすいのはない！
　　[iOSプログラミング入門 (全24回) - プログラミングならドットインストール](http://dotinstall.com/lessons/basic_ios)


###Q. StoryBoardの使い方が分からない
A. ちょっと前までは、これについて詳しく書かれている本や記事がなくて困りましたが、最近はありそう。
　　これもドットインストールで見ると基本的な使い方は分かります。
　　仕事で使わなかったのでよく知らない。。


###Q. StoryBoardって使わないの？
A. うちの職場では使ってないです。xibでやってます。
　　凝ったアプリを作るには、あまり実用的ではない(らしい)というのと、
　　全画面が１つのファイルになるので、複数人で開発する時に競合が発生しやすい、という理由。


###Q. xibって？
A. StoryBoardが出来る前に使われていた、GUIで画面を作成するツール。
　　StoryBoardと違ってて画面遷移は担当しない。1画面1ファイル。
　　クラスを作る時に、「With XIB for user interface」というのを選べば自動的に作られる。


###Q. GUIで作成した画面場の部品(ボタンとか)と、コードのひも付けはどうやってするの？
A. クラス作る時に、「With XIB for user interface」を選んでいれば、画面のxibファイルとクラスは自動で関連づけされます。画面上の部品とコードとのひも付けは、画面上のボタンをcontrolを押しながら .h ファイルにドラッグする。それを押した時の処理のひも付けは、GUI上でも出来るし、コードでも書ける。詳しくは調べれば載ってると思います。自分はコードで書く派。

#####追記
> 画面上の部品とコードとのひも付けは、画面上のボタンをcontrolを押しながら .h ファイルにドラッグする

コメントで教えて頂きましたが、.m にもドラッグ出来るそうです！
確かに部品のほとんどはpublicでなくていいものが多いので、.m にするケースが多そう。


###Q. コードで書く場合、画面遷移ってどうやるの？
A. 画面遷移は、基本的なパターンが3つあって、設計に応じてその中から使い分ける。
　　参考：[iOSアプリ画面遷移3本勝負 - たーせる日記](http://tercel-tech.hatenablog.com/entry/2012/11/13/004601)


###Q. 画面遷移時に実行したい処理はどこに書けばいいの？
A. 以下のような順番でメソッドが実行されるから、そこに書く。
　参考：[画面遷移時に呼ばれるメソッドの補足 - iPhoneアプリ開発まっしぐら★ - iPhoneアプリ開発グループ](http://iphone-dev.g.hatena.ne.jp/tokorom/20100110/1263150473)

　　上の記事はシンプルで分かりやすいけど、記事が古いから、iOS5から出来た viewWillLayoutSubviews と viewDidLayoutSubviews が載ってない。詳しくはこちら。アプリ起動した時に実行されるメソッドとかも説明されてますね。
　　参考：[iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する - A Day In The Life](http://d.hatena.ne.jp/glass-_-onion/20120405/1333611664)


###Q. 画面間のデータ共有はどうやるの？
A. ややこしいから、最初は以下のページを参考にとりあえず動くものを作ってた。。
　　参考：[iOSゆとりプログラミングのススメ - 仕事人の開発日誌](http://d.hatena.ne.jp/omaemona01/20111204/1322961924)

　　でもちゃんとやるなら、以下のページを参考にしましょう。
　　参考：[画面間でのデータの受け渡しに付いて: 永遠ログ](http://eien.seesaa.net/article/261740269.html)


###Q. コード書いたのに画面に反映されないんだけど？
A. XCodeで [Product] > [Clean]すれば直るという可能性もありますが、自分がよくやっていたのは、部品を初期化する前に、色々設定していたというケースでした。
　　具体的にいうと、initWithNibName: 中で設置した Label や Button に文字を設定して、実行しても反映されない！というケース。それは、UIViewController のライフサイクルをもっと勉強しろという話なんだけど、viewDidLoad が実行された後にしないと LabelやButton などの部品は初期化されていないので、それに値を設定しても反映はされません。部品に初期値を設定する場合は、viewDidLoad でしましょう。


##Objective-Cの基本

###Q. プライベート変数やメソッドはどう書くの？
A. <del>こことか参考になります。記事中にもありますが、Objective-Cの分からない事は公式ドキュメントの「Objective-Cによるプログラミング」を読むと良さそう。
　　参考：[イマドキっ子の Objective-C | cockscomb.info](http://cockscomb.info/objective-c_for_the_young_people_of_today/)</del>

追記(6/14)：こっちの方が最近の記事なのでおすすめ。インスタンス変数の宣言の仕方って、色んな情報があって最初分からないですよね。
[Modern Objective-Cでのシンプルなプロパティ記述方式 #iPhone #Objective-C #iOS - Qiita [キータ]](http://qiita.com/items/8bcd083e59d68ad94927)

###Q. @property, @synthesize て何？
A. 以下のページを参考。XCode4.4からは、@synthesize 省略可能。
　　参考：[Objective-Cの @property と @synthesize の組み合わせが何をやっているのかを解説 - 強火で進め](http://d.hatena.ne.jp/nakamura001/20101101/1288632739)

###Q. 定数定義ってどうやるの？
A. #define か const で、 const が推奨されてるんですかね。
　　<del>自分は、画面に表示する文字列などは、ファイルをまとめて #defineで宣言してます。</del>
　　画面に表示する文字列をまとめてたのは、 Localizable.strings でした…！
　　
　　参考：[Selection 9: Objective-cにおける文字列定数について](http://d.hatena.ne.jp/dice-t/20101216/1292478934)
　　参考：[よく使う数値や文字列をhファイルにまとめる。 - Object for cutie](http://d.hatena.ne.jp/tanaponchikidun/20120405/1333633708)