万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    南東京iPhone勉強会

    3.岸川

    UIVewControllerのコーナーケース(落とし穴)

    iOS View Controllerプログラミングガイド
    Cocoaメモリ管理プログラミングガイド
    ドキュメントに目を通しておこう。

    ・基本
    (現在の)Apple推奨の書き方
    ※2.0と生成されるのが違うから

    プロパティではなく、インスタンス変数に行う。

    ●アウトレットはプロパティが存在すれば(setterメソッドが実装されていれば)setter経由で設定される。

    ●setterが存在しない場合、直接インスタンス変数に設定される(retainされる)

    releaseで開放してあげること。

    Cocoaメモリ管理プログラミングガイドにsetterがない場合はretainする
    MacアプリはiPhoneよりも落とし穴が多い。

    InterfaceBuilderを使わない場合でも

    メモリ管理が少し簡単になるから。iPhoneはメモリエラーはすぐクラッシュ。

    そのインスタンスの状態がどうであっても
    self.propertyName = nil;と書けばOK
    retainやassinだろうが。
    nilで開放するというルール付けをする。
    プロパティの代入もself.propertyName = [[[XX aaloc] init] autorelease];

    iPhoneアプリくらいの規模なら〜〜
    公開して使ってもらう場合や(特にライブラリなど)
    素人がメンバーにいる場合を除く

    ■ビューのライフサイクル
    UIViewController

    Viewを切り替えるときにdisappearが頻繁に呼ばれる。

    loadView、viewDidLoadは複数回呼ばれる。
    ナビゲーションを経由して何もなければ呼ばれない。
    loadViewは何度呼ばれたかを気にしなくて良い。※正しく実装していたら(毎回初期化)
    Viewプロパティ、〜.view
    contentView
    self.viewにaddしてreleaseしてしまう。

    表のViewでなければ破棄
    viewDidUnload

    前のが残ったようにしないといけない
    乗らないViewなどを NavigationViewに乗せたものとか

    self.〜〜でやっておくと、nilを代入するだけでよくなり、めんどくさいことを考えなくて良い。
    プロパティの代入はメソッドの呼び出しになるので、オーバーヘッドになる。
    メソッド呼び出しを減らす(パフォーマンスチューニング)
    deallocはinitやdidUnloadで呼ばれたのを書く。

    viewDidUnloadに書いたからと言って、deallocに書いてないのはいけない。

    メモリ警告が発生した裏のビューコントローラ
    ツイッター テーブルビューが表示

    ウインドウ以外のビューに
    [view add];

    テンプレートメソッド・パターン
    処理内容は異なるけど手順は決まっている。

    CornerCase:
    iPhone4よりiPhone3GSのほうがメモリに余裕がある
    iPad, iPhone4は同じ感覚

    (例)バックグラウンドに入ったときはアラートやモーダルビューは閉じたほうがいい

    CornerCase:
    ポップオーバーを同時に2つ以上表示すると高い確率でリジェクト