auto reference counting(ARC)がオンだと"retainCount"メソッドが使えませんが、Core Foundationの関数で代用できるようです。 NSObject* obj = [[NSObject alloc] init]; NSLog(@"%d", (int)CFGetRetainCount((__bridge CFTypeRef)obj)); ARC管理下のオブジェクトをそうでない型にキャストするために__bridgeキャストしています。
iOS7にした途端、カスタムしたUIPageControlを使ったページが落ちるようになった。 以下の実装方法を使っていたんだけど、なんだこれ〜っと調べてみると以下の様なことがわかった。 http://ria.surfboard.co.jp/blog/2010/12/08/uipagecontrolcustomise/ 問題は「- (void)updateDots」部分。 まず、iOS6までのUIPageControlは、自身のSubViewsにUIImageViewを抱えている。 しかし、iOS7ではUIImageViewではなく、UIViewを抱えている。 当然、UIViewにsetImageなんてできないから落ちる、というわけです。 これってキャストすればよもや動かないか?と思ったけどダメ。 対応策としては、そのUIViewに新たにUIImageViewをセットすることで解決した。
objcにARCが導入されてから久しいですが、開発者がメモリ管理から解放されたかというと、そうでもないです。strongとweakの導入によって、少し抽象化がなされましたが、オブジェクトのallocate/releaseは意識してプログラムする必要があります。この記事は、ARC環境下での強参照/弱参照/循環参照についてイマイチ理解が及ばないという人のための記事であると同時に、私の個人的なまとめでもあります。 循環参照とは? 循環参照という現象は、私も最初はなかなか理解できませんでした。まず、文字的な定義から言うと、循環参照(retain cycle)とは 「オブジェクト同士がお互いに強い参照を持っているからどちらも解放されない」という現象のことです。 iOSにはObjective-C 2.0のランタイムが実装されていますが、ガベージコレクションは存在しません。理由はよく知らないですがシステ
出張三昧で時間が空いてしまった。。 iPhone の発売を心待ちにしつつ、勉強再開。 プロパティとは オブジェクトのプロパティを宣言によって実装する方法。 また、アクセサメソッドを記述せずにオブジェクトのプロパティにアクセス出来る構文も用意されている。 プロパティには2つの側面があり、プロパティを宣言する為の構文要素と、アクセスする為の構文要素がある。 プロパティの目的 アクセサの記述が面倒なので、宣言で簡単に記述できるようにした。 例えば、 宣言により、アクセサメソッドの動作方法を指定出来る。 宣言で指定された仕様に基づき、コンパイラがアクセサメソッドを合成出来る。 宣言されていないプロパティの使用の検出。 プロパティの実行時のインストロペクション。 プロパティの宣言 @property を使用してプロパティを宣言する。 宣言はメソッド宣言リスト内の任意の場所に置くことが出来、プロトコル
iOS5からサポートされているARC(Automatic Reference Counting)は今まで使う機会がなかったので名前だけ知ってるみたいな状態でした。 今さらですがいろいろ調べたので調査結果をまとめたいと思います。調査した環境は以下になります。 Mac OS X 10.8 Mountain lion Xcode 4.6.3 まずは参照カウンタ方式の復習 ARCは基本的には以前と同じ参照カウンタ方式を自動化したものなので、ARCをやる前にまずは手動でのメモリ管理を復習します。 まずは新しいプロジェクトを作成します。テンプレートはCommand Line Toolを使います。 今回は手動でメモリ管理するのでARCはチェックを外しておいて下さい。 プロジェクトが作成できたらCarクラスとEngineクラスを作成して下さい。テンプレートはObjective-C classです。 サンプ
Objective-C のプロパティの属性を指定するとき従うべきガイドラインをまとめた。 できる限り nonatomic を指定する atomic にしてもパフォーマンスが悪化するだけでほとんどメリットがない(参考:StackOverflow - Atomic vs nonatomic properties)。 nonatomic と atomic の使い分けの指針は次のとおり: 参照型: メモリアドレスのみの書き込みなので、常にnonatomicでよい プリミティブ型: int, BOOL等ワンステップでの書き込みが可能: 常にnonatomicでよい 単一のスレッドからしかアクセスされない: 設計に気をつけつつnonatomic推奨 複数のスレッドからのアクセスがあり、long,構造体などサイズの大きい値: atomic推奨 (thx to @takasek) 複数のスレッドから同時に
Objective-Cのメモリ管理おさらいと解放tips こんにちは。 iOS/Objective-Cによるアプリ開発では参照カウントによるメモリ管理が必要になります。 今回はiOS/Objective-Cでのメモリ管理の基礎からメモリリークの検知まで解説したいと思います。 参照カウント Objective-Cの全てのオブジェクトはNSObjectを継承しています。 全てのオブジェクトはこのNSObjectのメソッドを通じて参照カウントを扱います。 この参照カウントが、オブジェクトがいくつのオブジェクトから強参照されているかを表し、 0になったオブジェクトは誰からも参照されていないため解放される、という仕組みになっています。 C++に詳しい方はshared_ptrをイメージすると良いでしょう。 より詳細な解説はWikipediaなどが参考になります。 Objective-Cの参照カウント
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く