タグ

Objective-Cとinitに関するBowz13のブックマーク (5)

  • プロパティとインスタンス変数(ivar) — ios-practice 0.1 documentation

    getter/setter, init, dealloc 以外でivarにアクセスしない¶ インスタンス変数にアクセスする時は、基的にgetter/setter(アクセッサメソッド、プロパティ)を経由してアクセスすべきです。 インスタンス変数を直接使わない理由としては、 インスタンス変数を直接使う場合は不必要なretain等、参照カウントを操作するコードが必要になり見通しが悪くなる事や、 KVO(Key-Value Observing)が使えない事や、アクセッサメソッドを経由しないため変更に弱い部分があることなどがあげられます。 以下の条件を満たしているならインスタンス変数を直接使っても問題は無いですが、統一性という観点から インスタンス変数を直接参照するのは -init と -dealloc 以外では避けるべきです: 1.Is declared in a class using ARC

    Bowz13
    Bowz13 2014/01/29
    getter/setter, init, dealloc 以外でivarにアクセスしない
  • 【Objective-C】init内でself.viewを参照してはいけない | 技術は熱いうちに打て!

    概要init内でインスタンス生成時に一度だけやりたいことを書く場面は多いと思います。 しかし、このinit内でselfを参照しておかしい挙動になって困っていないですか? この記事では、init内でselfを参照することによって起きてしまう問題点 とどう解決するかなどを解説しています。 initメソッド内でself.viewを参照すべきではない結論から先に述べますと、viewのライフサイクルが変わってしまい、通常とは違う動作を行います。 じゃぁ、どうすれば良いのか?init内では、インスタンスの生成にとどめましょう。 frameに関わる変更はloadViewやviewDidLoad以降のメソッドで行う様にする。 これだけです。 それでは、詳細を見て行きましょう。 通常の動作の確認。まず、通常のライフサイクルを簡単に確認しましょう。 - (instancetype) init { self =

    【Objective-C】init内でself.viewを参照してはいけない | 技術は熱いうちに打て!
  • releaseの使いどころ : As Sloth As Possible

    俺もメモリ管理を間違えて頻繁にアプリを落としてしまうゆとりプログラマなのであんまり偉そうなことも言えないのだけど、「releaseの使いどころ。メモリの辺りがどうしてもわからない。」を読んでいくつか思ったところがあるので書いときます。 「何度もinit」はしない 既に確保されているハズの変数を二度initするのはメモリリークだよね? 解放されている変数は、 if (obj == nil) では判別できないのだろうか。 ボタン押下時などに、同じロジックを走ることが多くて、何度もinitをしてしまうことが多いのだが。。。。 具体的なコードを見てないので間違ってるかもだけど、多分これ「何度もinitしちゃう」じゃなくて「開放してないオブジェクトを参照してる変数に、何度も新しいオブジェクトをつっこんじゃう」ってことだと思って話を進める(そうすると、どこからも参照が辿れないのにメモリが開放されてない

    releaseの使いどころ : As Sloth As Possible
  • iOSアプリ開発のメモリ管理で気をつけること - A Day In The Life

    Objective-C での開発にだいぶ慣れてきたのですが、いまだメモリ管理まわりでハマることが多いのでまとめてみました。 メモリを確保してから解放するまでの流れ メモリを確保してから解放するまでの流れは以下の図のようになります(図はアップルのサイトから引用)。 alloc または init すると参照カウントが1になります alloc または init 系メソッドを呼ぶと参照カウントが1になります。 このように書いたのは、クラスの仕様によって alloc メソッドで retainCount が1になるオブジェクトと init 系のメソッドで retainCount が1になるオブジェクトがあるためです。alloc と init はセットで呼ばれることがほとんどなのでこの違いが問題になることはないと思いますが念のため。 int main() { /* allocで参照カウント1 */ NS

  • ありがとう alloc-init

    Objective-C では、オブジェクトの生成に alloc と init などのイニシャライザを組み合わせて使うというのは、ちょっとでもかじったことがある方はご存じでしょう。 MyObject *obj = [[MyObject alloc] init]; 今日はこの仕組みについてです。まず、この alloc-init について2つのポイントを挙げておきます。 呼出し側はイニシャライザの戻り値を使うことになっている イニシャライザはクラスのインスタンスメソッドとしてプログラマが追加/オーバーライドできる Objective-C ではこのことが言語の基として存在しているおかげで、オブジェクト生成の柔軟性がぐっと上がっています。イニシャライザはプログラマが実装するので、どのようなインスタンスを返すかは自由です。上記の例で言えば MyObject の init は、MyObject そのも

    ありがとう alloc-init
  • 1