今回からは話を変えて、Objective-Cの別の側面を紹介しよう。メソッドの宣言、実装にまつわる話だ。まずは、カテゴリから始めよう。 カテゴリによるクラスの分割 Objective-Cには、カテゴリと呼ばれる機能がある。クラスが持つメソッドを、名前の通りカテゴリごとに分類するための機能だ。これを使うことで、大きなクラスでもコーディングしやすいように分割する、といったことができる。 例を示そう。Objective-Cでは、メソッドの定義は@interface ClassNameという形で行うが、メソッドをカテゴリに分類するときは、@interface ClassName (Category)という文法を使う。次の例では、Documentというクラスを宣言し、そのクラスにPersistenceというカテゴリを追加している。このカテゴリは、書類の読み書きに関するメソッドを担当するようにしてみた
iPhone SDK4.0になり、マルチスレッド関連にもかなりの変更が加えられました。その一つの影響として、NSOperationの仕様も変わっています。 何も考えずにisConcurrentをYESにして組んでいたアプリはiOS4では動かなくなる可能性があります。 最も影響を受けるのは、NSURLConnectionによるHTTPリクエストをNSOperationを使っていた場合でしょう。NSURLConnectionをマルチスレッドで使うには、かなり丁寧に実装してあげないと動かなくなります。 手っ取り早いのはNSOperationQueueの生成を以下のように明示的にメインスレッドの呼び出しに変更することです。 // alloc,initは、iPhone3.xでisConcurrent=NOの時、およびiOS4では別スレッドで起動される // iPhone3.xでisConcurren
UIScrollView について直接使ったことが無いので調べてみた。 情報&サンプル iPhone OS Reference Library に解説とサンプルがある。 UIScrollView解説 Scroll View Programming Guide for iPhone OS スクロールサンプル Scrolling 2種類の UIScrollView を使ったサンプルプログラム。 サンプルは基本的なところが押さえられているので参考になる。 ポイント UIScrollView を使うのは簡単で次の2つをやるだけでいい。 1. UIScrollView.contentSize にスクロール対象ビューの全体の大きさを設定する 2. スクロール対象ビューを UIScrollView へ追加する 検証 解説とサンプルを参考にして簡単なプログラムを組んでみた。複数の画像を横へ並べてスクロール
プロパティの話も4回目になった。今回は、プロパティの属性の話をしよう。実際にプロパティを使ったプログラミングをしていると、適切な属性の設定がとても大切だということに気づくだろう。 属性の文法 属性とは、プロパティを修飾するものになる。プロパティを設定したコードをコンパイルすると、それに合わせたアクセッサメソッドを作ってくれるのだが、このメソッドの種類や動作について、いくつかの細かい設定を可能にするのが属性だ。 文法としては、@property指示子の後に、括弧を付けて指定することになる。複数の属性を指定するときは、カンマで区切る。たとえば、次のコードではassignとreadwriteという2つの属性を指定している。 @property (assign, readwrite) NSString* value; どんな属性が定義されているのか、詳しく紹介しよう。 アクセサの名前と種類 プロパ
Singletonパターンの話を続けよう。前回の最後で、Cocoaフレームワークに見られるSingletonの話をすると書いたが、前回の記事について読者から指摘をもらったり、書き漏らしたトピックがあったので、もう一回Singletonの実装の話をすることにする。 スレッドの排他制御 まずは、Singletonのインスタンスを取得するメソッドを、複数スレッドから呼ばれたときに排他制御することについて。 前回、「Objective-Cではスレッド同期のための文法は提供されていない」と書いてしまったが、これは誤りだ。昔のObjective-Cにはなかったが、現在では@synchronizedというキーワードが追加されている。これを使うと、ランタイムレベルでの排他制御を行うことができる。GCC 3.3以降、Mac OS Xだと10.3以降から使用可能だ。 この文法に関する詳しい説明は、「Objec
Copyright (C) iPhoneアプリ開発備忘録 All rights reserved. ブログ内で記したコード、内容の正確性は保証いたしません。 記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。 iOS4.1 SDKでビルドすると、iPhone実機の設定に関わりなく、NSDate型はLOCALEの指定をしないと、世界標準日時(GMT)が返ってくるようになった。 これを以前のバージョン(iOS4.0.1以前)で使っていた形式で文字列として取り出す方法。 下記は、ローカル時刻は日本、"YYYY/MM/DD HH:MM:SS"の形式で文字列変換する方法。 NSDate *today = [NSDate date]; NSLocale *locale_ja; locale_ja = [[[NSLocale alloc] initWithLocaleIdenti
はじめに 今回は、clangの静的解析機能を紹介します。 LeopardのOpenGLに採用されたことでも知られる、LLVMというコンパイラプラットフォームがあります。clangはLLVM内のプロジェクトのひとつで、gccに変わるC/C++/Objective-C用のLLVMフロントエンドを開発しています。 複数のAppleのエンジニアが開発に参加しており、Objective-Cを積極的にサポートしているのも特徴です。 clangでは、通常のコンパイラとして以外にもコードの内部構造にアクセスするいくつかの機能があり、そのひとつが静的解析機能です。 プログラムの静的解析 プログラムを実行せずにプログラムの問題点・バグなどを分析することを「静的解析」といいます。 最近では、JavaのFindBugsが有名ですね。 人力で行うコードレビューも、静的解析と言われることもあります(そりゃそうでしょう
Objective-Cの勉強がてら、辞書いらずの簡易形態素解析(分かち書き)ソフト、 「TinySegmenter」をObjective-Cに移植してみました。 ホントは人工無脳アプリを作ったタイミングでお披露目しようとしてましたが、 飽きた(!)のでライブラリとして先に公開しちゃいます。 tnantoka's TinySegmenter.m at master - GitHub 使い方は簡単です。 CocoaOnigurumaをプロジェクトに組み込んだ後、 TinySegmenter.hとTinySegmenter.mをClassesに放り込んで下さい。 あとは以下のようなコードで分ち書きができます。 #import "TinySegmenter.h" : : TinySegmenter* segmenter = [ [ TinySegmenter alloc ] init ]; NSA
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く