タグ

ブックマーク / glassonion.hatenablog.com (10)

  • NSOperation 非並列実行モードと並列実行モードの使い分け - A Day In The Life

    バックグラウンド処理を手軽に実行できる NSOperation クラスですがこのクラスをきちんと理解して使うには NSOperationQueue クラスについて理解する必要があります。 前回の記事で NSOperationQueue の使い方について説明しました。まだお読みでない方はこちらの記事を先に目を通しておくことをお勧めします。 NSOperationQueue スレッドと処理の関係 今回は NSOperation について NSURLConnection を使ったサーバ通信プログラムを例に説明していきます。 NSOperation には2つの実行モードが存在する NSOperation クラスには「非並列実行モード」と「並列実行モード」の2つの実行モードがあります。 非並列実行モードは処理の終了を NSOperationQueue に任せるのに対し、並列実行モードはプログラマが任

    NSOperation 非並列実行モードと並列実行モードの使い分け - A Day In The Life
  • iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life

    以前iPhoneアプリ開発時のメモリ管理で気をつけることという記事を書いたのですがマルチスレッド時のメモリ管理に関して全く触れてなかったのでまとめてみました。 NSAutoreleasePool はスレッドごとに作成する 処理を別スレッドで実行する場合、スレッドごとに NSAutoreleasePool が必要になります。NSAutoreleasePool の作成を忘れるとメモリリークします。 以下のように main 関数から Sample クラスのインスタンスを生成してメソッドを呼び出している場合、シングルスレッドの場合とマルチスレッドの場合で NSAutoreleasePool の作成タイミングが異なります。 @interface Sample { } - (void)hoge; - (void)foo; - (void)bar; - (void)baz; @end int main(

    iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life
  • NSOperationQueue スレッドと処理の関係 - A Day In The Life

    iOS4 になって NSOperationQueue クラスの仕様に追加がありました。以前は並列処理しか出来なかったのですが mainQueue メソッドが追加になり逐次処理も出来るようになりました。変更点も含めて NSOperationQueue の使い方をまとめてみます。 NSOperationQueue クラスの使い方をきちんと理解していると NSOperation クラスの非並列実行モードと並列実行モードの使い方を間違えることも少ないと思います。 NSOperation クラスについては以下の記事で詳しく説明しています。 NSOperation 非並列実行モードと並列実行モードの使い分け NSOperationQueue と NSOperation の関係 NSOperationQueue と NSOperation を使うと、バックグラウンドで何か処理をしたい場合に一連の処理をま

    NSOperationQueue スレッドと処理の関係 - A Day In The Life
  • iOS でオブジェクトをシリアライズしてファイルに保存する方法 - A Day In The Life

    iOS でデータを永続化する方法の続きです。今回はシリアライズされたオブジェクトの保存方法について説明します。シリアライズされたオブジェクトはファイルで保存することが容易なためデータ永続化の際に頻繁に使用されます。 シリアライズ自体はデータの保存に限らず、Interface Builder やネットワークを使ったデータの送受信などいろいろなところで使われています。 プログラマであれば必ずおさえておきたい技術の一つです。 シリアライズって何? オブジェクトの状態をバイナリ(0と1の集まり)に変換することをオブジェクトのシリアライズまたはシリアル化といいます。逆にバイナリをオブジェクトに変換することをデシリアライズといいます。 シリアライズされたデータは iOS 上では NSData オブジェクトとしてあつかわれます。NSData オブジェクトはそのままファイルに保存することができます。 iO

    iOS でオブジェクトをシリアライズしてファイルに保存する方法 - A Day In The Life
  • NSUserDefaults を使ったデータの保存方法 - A Day In The Life

    iOS でデータを永続化する方法の続きです。今回は NSUserDefaults クラスを使ったデータの永続化方法について説明します。このクラスを使うと簡単にデータの保存と読み込みが出来るのでアプリ開発で頻繁に使用されています。 NSUserDefaults って何? アプリ固有の設定値を保存することに特化したクラスです。アプリ開発者は NSUserDefaults オブジェクトを通して Key-Value 形式でデータにアクセスします。データの保存場所の管理は NSUserDefaults オブジェクトがすべて行ってくれます。 実際のデータは ホーム/Library/Preferences 以下にプロパティリスト形式で保存されます。 データの保存と取得で使用するメソッド NSUserDefaults クラスにはデータ型に応じて以下の保存と取得メソッドが定義されています。 オブジェクトの型

    NSUserDefaults を使ったデータの保存方法 - A Day In The Life
    Bowz13
    Bowz13 2013/06/07
    NSUserDefaults オブジェクトの registerDefaults: メソッドはあくまで初期値の設定に使うためのメソッドで、このメソッドを使って保存したデータはメモリ上にしか保存されず プロパティリストに書き込まれることはありません。
  • シンプルで簡単に HTTP 通信が出来るライブラリを公開しました - A Day In The Life

    iOS で HTTP 通信をするときはいつも ASIHTTPRequest を使っていました。 しかし残念なことに最近 ASIHTTPRequest の開発が終了してしまい Automatic Reference Counting(ARC) に対応する予定もないようなので自分で ARC に対応した HTTP 通信のライブラリを作成しました。 コードは github で公開しています。ライセンスはBSDライセンスです。 R9HTTPRequest 中身はただの NSURLConnection のラッパーです。コード量も少なく軽いライブラリです。 主な機能は以下の通りです。 HTTP GET POST PUT DELETE など HTTP の非同期通信 ※現在非同期通信のみサポートしています。 マルチパート POST(画像送信など) 自動リダイレクトのオン/オフ WSSE 認証のサポート R9

    シンプルで簡単に HTTP 通信が出来るライブラリを公開しました - A Day In The Life
  • iCloud プログラミング入門 - A Day In The Life

    「iOS データ設計入門」でデータはメモリ、フラッシュドライブ、iCloud に保存することができると説明しました。今回は iCloud にデータを保存して複数端末でデータを共有する方法について説明していきます。 iCloud って何? クラウドと聞くとなにやら難しい感じがしますが、iCloud を簡単にいうとインターネット上にあるデータの置き場です。実体はものすごい数のサーバです。 iCloud のデータは Apple ID ごとに管理されていて同じ ID であれば iPhone iPad iMac など端末を問わずデータを共有することが出来ます。 この記事は iCloud のプログラミングについて説明するので「iCloud って何って?」ところには深入りしません。iCloud に関する詳しい説明は下記書籍を参照してください。 iCloud パーフェクトガイド iCloud を使うと何が

  • 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

  • マルチタスキング対応後のアプリのイベントフローをまとめてみた - A Day In The Life

    ※iOS 5の登場でこの記事の内容は古くなりました。最新の情報は以下の記事をご覧ください。 iOS のイベント駆動をライフサイクルイベントとユーザアクションイベントにわけて理解する iOS4で導入されたマルチタスキングですが便利な反面イベントの発生順序が大幅に変更され複雑化しました。イベントの発生順序をきちんと把握しておかないと思わぬところでメモリをったりバッテリに負担をかけてしまうのでまとめてみました。 下図で色の変わっているメソッドはiOS4で追加されたメソッドです。 2010/7/1:図を修正 deallocメソッドを削除しました。アプリ終了時UIApplicationDelegateのdeallocメソッドは呼び出されません。システム側でリークも含めてメモリ領域を解放してくれます。paellaさんご指摘ありがとうございました。 applicationWillResignActiv

    マルチタスキング対応後のアプリのイベントフローをまとめてみた - A Day In The Life
  • NSManagedObjectでTo-Many関連を使用したときにコードの自動生成がされないバグの解決方法 - A Day In The Life

    Core Data の NSManagedObject クラスで以下のように To-Many(One-To-Many) 関連を使ったときにコードの自動生成をすると実装コードが生成されない場合があります。 通常の To-Many 関連では問題が起こらないのですが以下のように Ordered(順序) を指定してから NSManagedObject クラスのサブクラスの自動生成をすると実装コード(.m ファイルのコード)の一部が生成されません。 これは Xcode のバグみたいです。最新の Xcode 4.6.1 でも発生しています。 自動生成されないコードはプログラマ自身が実装する必要があります。以下は Transaction(取引) クラスと Journal(仕訳明細) クラスに Ordered の To-Many 関連を設定する場合のコードの実装例です。 #import "Transact

    NSManagedObjectでTo-Many関連を使用したときにコードの自動生成がされないバグの解決方法 - A Day In The Life
  • 1