前回の予告通り、今回からデザインパターンをObjective-Cで実装してみる。 取り上げるパターンの順番だが、テキストとして使用する「オブジェクト指向における再利用のためのデザインパターン」(以下GoF本)とは少し変更する。まず生成に関するパターンから始めるのは同じだが、その中のSingletonを最初に取り上げよう。 Singletonとは Singletonは、インスタンスを1つしか生成しないクラスのためのデザインパターンだ。主な用途としては、ファイルマネージャや、ウィンドウマネージャなど、対象がただ1つしかないものが挙げられる。 Singletonクラスのインスタンスを取得する場合、通常のalloc、initといったメソッド(C++でのnewに相当)は、使わない。その代わりに、インスタンス取得のためのメソッドを提供することになる。作成された、ただ一つのインスタンスは、Singlet
Singletonパターンの話を続けよう。前回の最後で、Cocoaフレームワークに見られるSingletonの話をすると書いたが、前回の記事について読者から指摘をもらったり、書き漏らしたトピックがあったので、もう一回Singletonの実装の話をすることにする。 スレッドの排他制御 まずは、Singletonのインスタンスを取得するメソッドを、複数スレッドから呼ばれたときに排他制御することについて。 前回、「Objective-Cではスレッド同期のための文法は提供されていない」と書いてしまったが、これは誤りだ。昔のObjective-Cにはなかったが、現在では@synchronizedというキーワードが追加されている。これを使うと、ランタイムレベルでの排他制御を行うことができる。GCC 3.3以降、Mac OS Xだと10.3以降から使用可能だ。 この文法に関する詳しい説明は、「Objec
アクセサを使って値をインクリメントしています。これ、ぱっと見て問題があると感じますか? このコードはマルチスレッド環境で動くため、プロパティは以下のようにデフォルトのatomicで(nonatomicを指定せず)定義されています。 @interface AtomicTest : NSObject { int count; } @property(assign) int count; - (void)increment; @end @implementation AtomicTest @synthesize count; - (void)increment { self.count++; } @end int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; A
iOS 5が公開されて、Dev CenterもWe’ll be back soon になっています。 iOS5 NDA will be gone soon! 記念に、iOS 5 のプログラム面での変化、ARCを使った簡単なサンプルをGitHubに登録しましたのでご覧下さい。 追記:うーねこ? (@ne_ko_)さんからの指摘であった、”クラス変数”という間違えた記述を、”インスタンス変数”という正しい記述に変更しました。 tomohisa/EasyBlockCallback – GitHub ARC は、メモリ管理でこれまで手動で行っていた、 Retain Release Autorelease を自動でコンパイラで行うようにさせる方式です。一定のルールに従う必要がありますが、メモリ管理に関する、Retain、Releaseを書かなくてよくなります。このサンプルには、ARCを使っているプロ
XcodeのObjective-C関連のWarning、errorについてまとめました。 自力解釈したものもありますが、参考にしたサイトもあります。 warning:‘X‘ may not respond to ‘Y‘ クラスXはメソッドYを呼べないかもしれません(そんなメソッドあったかなぁ) ヘッダファイル(class.h)内のクラス宣言の中にそのメソッド名がない(呼び出す前に宣言されていない)か、メソッド名間違いの可能性あり。 メソッド名定義例 -(void) popUpReadMe; warning:unused variable ‘X‘ 変数Xは使われていません(そんな変数名知らないけど) 宣言されている変数が使用されていない。変数名間違いの可能性もあり warning:local declaration of ‘X‘ hides instance variable ローカル
Blocks are perhaps the most significant new language feature introduced by Apple in years, and I've written a lot about them before. The new C++ standard, C++0x, introduces lambdas, a similar feature. Today, I want to discuss the two features and how they are alike and how they differ, a topic suggested by David Dunham. Terminology I will refer to Apple's blocks extension as "Objective-C blocks" e
サルにもできるiPhoneアプリの作り方 使うだけじゃもったいない! iPhoneをとことんに遊び倒すために「誰でも」「簡単に」「自分だけの」アプリを作れるようになるための、とっておきのノウハウを教えます。 さぁアナタもご一緒に。世界に1つだけのオリジナルアプリを作りましょう! PR まずはここからサルでき出版プロジェクト開始!iPhone Dev Centerに登録しよう その1Objective-C入門その1:まずはコメントの書き方から「サルできテンプレート」開発プロジェクト 開始!わたしがやりたい「IT技術を教える」ということ>>目次はこちら 携帯でもサルでき! カレンダー <<March>> S M T W T F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
データ件数は、Customerが 500件、Karteが6,000件(Customer1件につきKarte 12件)となっていて、それぞれを1つの CSVファイルへ書き出す。 処理は次のような感じになる。 NSMangedObjectContext* moc = [取得]; NSArray* customers = [moc Customer全件取得]; for (NSManagedObject* customer in customers) { NSArray* kartes = [moc Karte取得・条件:customer]; for (NSManagedObject* karte in kartes) { [CSV1行書き出し]; } }メモリのフットプリント(利用状況)はこんな感じ。 Customer, Karte を1件づつ読み込む度にメモリが消費され、フットプリントが増大し
iPhone開発で、メモリ管理の基礎を社員に伝えることが増えてきたので、エントリとして書こう。 Objective-C基礎 メモリ管理の前にObjCの基礎として、メソッド呼び出しの話。 クラスのインスタンスaがmethodAをコールするときは、 [a methodA] と書く。このとき、aがnilだったときは、エラーではなく、コールされない。methodAに戻り値があるときは、それは、0やnilやNOが返る。ObjCでは、 void dealloc { if(a!=nil){ [a release]; } [super dealloc]; } は、気持ち悪いので、nilチェックはやめましょう。 なお、ObjCでは、動的にメソッドを差し替えることができ、コールの度にメソッドが存在しているかも確認しています。そのため、LL言語(ライトウェイト言語、スクリプト)のように柔軟な記述が可能です。そし
Objective-CのNSStringなポインタ変数をcopyしても、メモリに新しく領域が確保されるわけではなく、同じアドレスを指し示すという事を聞いたので、本当なのか調べてみた。比較の為、NSMutableStringも。 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *foo = @"Hello"; NSString *copiedFoo = [foo copy]; NSString *retainedFoo = [foo retain]; NSMutableString *bar = [N
このドメインは お名前.com から取得されました。 お名前.com は GMOインターネット(株) が運営する国内シェアNo.1のドメイン登録サービスです。 ※表示価格は、全て税込です。 ※サービス品質維持のため、一時的に対象となる料金へ一定割合の「サービス維持調整費」を加算させていただきます。 ※1 「国内シェア」は、ICANN(インターネットのドメイン名などの資源を管理する非営利団体)の公表数値をもとに集計。gTLDが集計の対象。 日本のドメイン登録業者(レジストラ)(「ICANNがレジストラとして認定した企業」一覧(InterNIC提供)内に「Japan」の記載があるもの)を対象。 レジストラ「GMO Internet Group, Inc. d/b/a Onamae.com」のシェア値を集計。 2024年5月時点の調査。
インスタンスの生成から、メソッドの実行、そしてインスタンスの破棄まで説明します。 メソッドの実行 インスタンスの生成の前に、まずはじめにメソッド実行の書き方を説明します。なぜなら、インスタンスの生成はクラスメソッドを用いて行うからです。Objective-C では、メソッドの実行をメッセージ式で書きます。メッセージ式とは、次のような形式をとります。 [anObject method:arg0 label1:arg1 label2:arg2 label3:arg3 .... labelN:argN ]; また、引数を取らないメソッドの場合 [anObject method]; となります。 anObjectは、メソッドを実行するインスタンスとなります。Objective-Cでは、それをレシーバと呼びます。method にはメソッド名が入り、argNには、それぞれメソッドの引数が入ります。では
Mac OS X版 アフォなアプリ|KVCについて ブログトップ Objective-Cのメモリ管理がわけわからなくなったとき [Cocoa覚え書き] [編集] あふぉな私がメモリ管理がわけわからなくなったときのための覚え書き。 ○動的インスタンス生成 C++の場合は、new 、deleteで動的なインスタンスを生成、破棄する。 スコープ内でauto変数にnewの戻り値を代入してdeleteをするには問題ないが、newしたままスコープを出ると見失ってしまうので、クラスメンバかstaticな場所に置いておく。これは、C言語のalloc()系とfree()との関係と同じ。 Objective-Cの場合は、alloc、releaseでインスタンスの生成、破棄をする。 スコープ外へ出るときもC、C++ともに同様である。 ○基本へ戻ってC言語のauto変数 auto記憶クラスは、スコープ内で有効であ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く