通知の仕組みとメーリングリスト 不特定多数のオブジェクトに対してメッセージを送信する必要がある場合、通知(Notification)と呼ばれる仕組みを利用する事ができます。この仕組みはメーリングリストに似ています。 普通の電子メールの場合、メールは宛先として指定したメールアドレスに届けられます。メーリングリストの場合は、ある特定の宛先にメールを送ると、そのメールは予め登録されている全てのメールアドレスに届けられます。この特徴を利用して、たとえば特定のテーマに興味を持った人の間で情報や意見を交換できる場を作ったり、プロジェクトメンバー間の打ち合わせや業務連絡に使ったりされているわけです。 通知の仕組みとメーリングリストを比較してみましょう ある特定の宛先にメールを送ると、そのメールは予め登録されている全てのメールアドレスに届けられる →ある特定のオブジェクト(通知センター)に通知をポストする
再申請したアプリの結果は、今日の時点ではまだ返ってきていない。大体in reviewになってから結果がくるまでに営業日で7日ぐらいかかるようだ。アプリの審査が通ったら、お披露目しようと思うのだけど、また要再提出となると、また一週間ということになって・・・。iPhoneアプリはこのあたりが一番難しいですね。 任天堂やソニーなんかはもっと速いんだけど、審査をする本数も全然違うというのもあるんだろう。そういえば任天堂にはマリオクラブ(いつのまにか会社になっててびっくりした)というのがあり、初めて名前を聞いたときは秘密結社?などと思ったのだけど、ソフトのクォリティコントロールをしているところだ。ここが、OKを出さないとリリースさせてもらえない。ソフトウェア上のバグから、どのロットのハードではちゃんと動かないなどというレポートまで報告してくれる。どのロットのハードでもちゃんと動かないとダメというのが
オブジェクトの初期化 インスタンス変数を保有しているクラスの場合、その多くが初期値を必要とするでしょう。 初期化を忘れてしまった場合、適切に動作しない可能性があります。 一般的なオブジェクト指向型言語では、オブジェクトを安全に、確実に初期化するための方法としてコンストラクタを用意しています。 コンストラクタは、クラスのインスタンスが作成された直後に自動的に呼び出される特別なメソッドのことですが、Objective-C ではコンストラクタは存在しません。 その代わり、コンストラクタはルートクラスが仕様に基づいて提供する構造を採用しているため、ルートクラスの初期化用メソッドを明示的に呼び出さなければなりません。 Object ルートクラスや、Mac OS X の NSObject クラスでは、init という名前のメソッドがオブジェクトの初期化用メソッドとして定義されています。 この init
さて、マルチコアを使い倒すためにはthreadを生成しなければならない。それを簡単にするためのNSOperationのお勉強。このFoundationのクラスは10.5 Leopardから使えるようになった。 Cocoaアプリでマルチコアに対応させるためにはこれまでNSThreadを使っていた。NSThreadはthreadの同期の機能はなく、自分でNSLockなどを使って実装する必要があった。注意深く作法を守らないと、つまらない理由のせいでデッドロックから抜け出せないコードになってしまうなんてことがよくある。 そのthread生成から同期、特に終了処理(子threadが全部終わるまで待つ)というのを肩代わりしてくれるのがNSOperationらしい。 マルチコアを使う用途だけでなく、ある程度時間のかかる処理をマルチスレッド化する場合にも使えるらしいので、以前数値計算のためにNSThrea
iOS4 になって NSOperationQueue クラスの仕様に追加がありました。以前は並列処理しか出来なかったのですが mainQueue メソッドが追加になり逐次処理も出来るようになりました。変更点も含めて NSOperationQueue の使い方をまとめてみます。 NSOperationQueue クラスの使い方をきちんと理解していると NSOperation クラスの非並列実行モードと並列実行モードの使い方を間違えることも少ないと思います。 NSOperation クラスについては以下の記事で詳しく説明しています。 NSOperation 非並列実行モードと並列実行モードの使い分け NSOperationQueue と NSOperation の関係 NSOperationQueue と NSOperation を使うと、バックグラウンドで何か処理をしたい場合に一連の処理をま
バックグラウンド処理を手軽に実行できる NSOperation クラスですがこのクラスをきちんと理解して使うには NSOperationQueue クラスについて理解する必要があります。 前回の記事で NSOperationQueue の使い方について説明しました。まだお読みでない方はこちらの記事を先に目を通しておくことをお勧めします。 NSOperationQueue スレッドと処理の関係 今回は NSOperation について NSURLConnection を使ったサーバ通信プログラムを例に説明していきます。 NSOperation には2つの実行モードが存在する NSOperation クラスには「非並列実行モード」と「並列実行モード」の2つの実行モードがあります。 非並列実行モードは処理の終了を NSOperationQueue に任せるのに対し、並列実行モードはプログラマが任
NSOperationってCoreAnimationみたいな派手な機能と違って、あまり解説されていない気がするので、使い方を書いておきます。オーディオのアプリケーションでも、読み込んだオーディオファイルの波形の画像をバックグラウンドで作っておいて、出来上がったら表示するみたいな事にも使えると思いますので。(※2008/5/12 記事にNSInvocationOperation等いろいろ修正を加えています。GCなしにも対応のはず。) NSOperationを使う NSOperationのサブクラスのmainメソッドにバックグラウンドで行いたい処理を記述しておき、そのインスタンス(以後、オペレーション)を作成して、NSOperationQueueのインスタンス(以後、キュー)のaddOperationメソッドに渡すと、あとは勝手にバックグラウンドで処理してくれます。キューへ渡した後にオペレーシ
iOS/iPhone/iPad/MacOSX プログラミング, Objective-C, Cocoaなど 問題 この前リリースしたカスタム UIAlertView は表示メソッドを呼び出した後はそのまま処理が続行される。 Cocoaの日々: [iOS] ユーザ名/パスワードの入力ができるカスタム UIAlertView ライブラリを公開 例えば下記のような場合。 - (IBAction)showAlert:(id)sender { [LKAccountPanel showWithTitle:@"Test" completion:^(BOOL result, NSString* username, NSString* password) { NSLog(@"result: %d\nusername: %@\npassword: %@", result, username, password)
MGTwitterEngineを使っていて、同期通信を行いたい場面がでてきました。NSURLConnectionでsendSynchronousRequestで同期通信で送信するものを、最初に作りましたがタイムアウトの設定ができない、途中でキャンセルできないなどの問題がありました。 そのため、通信部分は非同期通信を使う。しかし、呼び出したメソッドは通信が終わるまで、returnを返さないようにMGTwitterEngineを改造することにします。 MGTwitterEngineのメソッドを呼び出すと、その中でレスポンスが得られるまで待つという風に実装します。 まんず、待たせるという動作を制御する変数をdidFinish_として定義します。これをNOに設定すると"待て"、YESにすると"終われ"という制御を外部から行えるように、プロパティ化しておきます。 MGTwitterEngine.h
(2011-12-01 追記あり)UIApplicationDelegateの呼び出しが iOS5 から変わった件。 Task Completion を使った iOS4 でのバックグラウンド実行サンプルを作ってみた。 サンプル 実行するとキューにたまった 30個のデータが順番に処理されてテーブルから消えていく。 処理は GCD を使い別スレッドで実行される。右上の[+]ボタンを押すとキューへデータが追加されていく。途中でホームボタンを押してアプリを切り替えても Task Completion によって処理は停止すること無く実行され続ける。わかりやすいようにアプリのアイコンバッヂに残タスク数を表示してみた。 バッジの数字は時間と共にカウントダウンされていくので処理が行われていることが確認できる。 Task Completion とは? Task Completion は、iOS4 から導入さ
Mac OS X 向けアプリケーション開発を仕事としている永遠製作所が、日々の開発でつきあたった問題点や、ちょっとしたTipsをメモしていこうと言う、自分勝手な覚え書きブログ。 UIPickerViewを使うときに、UIDatePickerのように上に回しても下に回しても回転して無制限に数値を選べるようにできたらいいのにと考える人は多いと思います。 私もその一人です。巷ではデータ数を変えないで無限に回転するかのように見せるプログラミングテクニックを公開しているひともいます。 しかし必要になるたびに毎回同じような実装を繰り返すのはうれしくありません。そこでなんとか汎用的なクラスにできないかと考えていたのですが、あるときCocoa勉強会のKさんに「delegate(とdataSource)の間にはさむアダプターのようなものにしたら実現できるのではないか」と示唆をいただきました。 その方式で実装
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
最近、メモリリークに興味があるので(言い回しが変ですが)色々と調べてみました。 clangでObjective-Cプログラムを静的解析http://kirika.la.coocan.jp/acts/cocoastudy/200807/clang-static-analyzer.html iPhoneアプリ開発にかかせない静的解析ツール「clang」http://blog.asial.co.jp/504 [iPhone SDK] iPhone SDK向けのコードを静的コード解析するhttp://son-son.sakura.ne.jp/programming/iphone_sdk_iphone_sdk.html 静的コード解析をしてメモリリーク等を教えてくれるclanghttp://blog.livedoor.jp/hayashi311/archives/615456.html iPhone
iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る:SDKで始めるiPad/iPhoneアプリ開発の勘所(4)(1/4 ページ) 初めてiPhone/iPadアプリ開発に挑戦する人が、迷わず短時間でアプリを作れるように、数多くの情報の中から要点をグっと絞った開発の勘所を紹介する入門連載です 連載第3回「iPhone/iPadアプリ作成の仕上げ・国際化・デバッグ」では、完成したアプリの仕上げ作業や、開発時のデバッグ方法などを紹介しました。これまでの連載で、アプリ開発の基礎については一通り解説しました。今回からは、開発環境をiOS 4のSDKに更新し、さらにさまざまな機能の実装について紹介していきたいと思います。 今回は、Twitterアプリの作成を通し、Webサービスと連携したiPhone/iPadアプリの作成方法について解説します。 サンプルTwitterクライアントの概
UITableViewCellのプリセットのビューの使い方。これで要件を満たさない場合はカスタムビューを自分で設定しないといけない。 プリセットのビュー4種類 以下4つの定数で提供されていて、セルの初期化時に指定する。 UITableViewCellStyleDefaultUITableViewCellStyleSubtitleUITableViewCellStyleValue1UITableViewCellStyleValue2 コードで確認してみる。新規プロジェクトからNavigation-based Applicationを選択してTableViewのdelegateメソッドのtableView:numberOfRowsInSection:とtableView:cellForRowAtIndexPath:を以下に修正。今回は確認用コードなのでcellをreuseするコードは省略。 -
2009年1月21日 UITableViewのセルが選択された際の表示を変更しました。 先日の「Air Data Lite 1.1.0が審査でRejectされてしまいました。」でお伝えしましたが、iDiskボタンを押した際に表示される画面のUITableViewのセルが選択された際の表示方法がガイドラインに沿っていないということだったため、ちょっと画面の制御を変更してみました。 version 1.0.1では、didSelectRowAtIndexPathで、何もしていなかったので、以下のように青色のハイライト表示になっていましたが・・・ version 1.1.0では、didSelectRowAtIndexPathでちゃんとdeselectRowAtIndexPathをした上で、セルの文字色を青色で表示することで選択状態であることを示すようにしてみました。 // UITableViewの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く