タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

programmingとProgrammingとobjective-cに関するteracy_junkのブックマーク (224)

  • Second Flush:コレクションのコピー

    November 15, 2010 コレクションのコピー 『はじめてのiPhoneプログラミング』の文中で、『NSMutableCopyingのコピーは浅いコピーなので〜』の説明が足りない気がしたので調べてみました。 オブジェクトのコピーとしては『浅いコピーと深いコピー』として『詳解 Objective-C 2.0』に解説があるのですが、辞書の場合についてもう少し知りたくて検索した所『Collections Programming Topics』というリファレンスがありましたので、『Copying Collections』の項を訳してみます。 ●コレクションのコピー オブジェクトのコピーには浅いコピー(Shallow copy)と深いコピー(Deep copy)の二種類があります。 通常のコピーは浅いコピーで、新しく生成したコレクションの所有権は元のオブジェクトと共有しています。 深いコ

  • 【コラム】ダイナミックObjective-C (58) デザインパターンをObjective-Cで - Prototype (2) | エンタープライズ | マイナビニュース

    前回は、Prototypeパターンの基的な実装を紹介した。その結果、ある意味当然だが、Prototypeパターンではオブジェクトのコピーが重要な事が分かったと思う。 そこで、今回はObjective-CとCocoaにおける、コピー機能の紹介をしよう。非常に基的な機能なのだが、議論すべき点はたくさんある。 単純なコピー まず、最も単純なコピーから考えてみよう。コピーする対象はオブジェクトなのだが、いくらオブジェクトといっても所詮はメモリ上のデータなので、同じサイズのメモリ領域を確保して値をコピーしてやれば、コピーは完了する。Objective-CはC言語とのハイブリッドなので、mallocとmemcpyを使えばいい。 といっても、それでは原始的すぎるので、Cocoaではオブジェクトの単純なコピーをサポートする関数が用意されている。NSCopyObjectだ。定義は次のようになる。 Lis

  • 複製を作るためにNSCopyingプロトコルに準拠する

    NSCopyingプロトコルについて RMGWindowControllerの「モデルオブジェクトを追加、削除、複製する」-「MasterMotifオブジェクトを追加、削除、複製する」で、さりげなくMasterMotifクラスのインスタンスオブジェクトにcopyメッセージを送っていますが、このメッセージに対応するにはそれなりの処理が必要です。 NSObjectのcopyメソッドの説明を読んでみましょう。大体以下の様な事が書いてあります。 copyメソッドはcopyWithZone:メソッドが返したオブジェクトを返す。引数のzoneはnilを指定して呼んでいる。 copyWithZone:はNSCopyingプロトコルのメソッドである。 copyメソッドはNSCopyingプロトコルに準拠するクラスにとって便利な様に用意したメソッドである。copyWithZone:メソッドを実装していないと

  • 独自クラスをディープコピーに対応させる : Objective-C プログラミング

    Mac OS X や iPhone プログラミングで、NSString や NSArray, NSDictionary といった一般的なクラスには copy メソッドが実装されていて、インスタンスの複製を行うことが出来るようになっています。 もっとも、NSDictionary や NSArray といった copy メソッドでは、"シャローコピー" といって、保持しているインスタンスを retain で複製する方式がとられるようなので、コピー後にもとになった配列の要素値を変更したりするとコピー先も変更されたりするため、コピーの感覚が思っているものと少し違うかもしれません。 一般的な感覚では、copy というのはすなわち、各インスタンスの複製をとる "ディープコピー" が自然な挙動に思えます。 コピーの際の挙動はともかくとして、独自に実装したクラスでも NSCopying インターフェイスを

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • 無為空間 |NSMutableArrayから任意の要素を削除するには

    無為空間 むいむい(´ω`*) Entries NSMutableArrayから任意の要素を削除するには タグ: Objective-C NSMutableArray等のコンテナ内の要素を走査するには、通常NSEnumeratorか高速列挙を使う。 これらはとても便利な仕組みだが、走査中はコンテナに変更を加えられないため、「走査しながら不要な要素を見つけて除外する」ことができない。 for(NSNumber* number in array) { if([number intValue] % 3 == 0) { [array removeObject:number]; // ここで除外すると壊れる!(゜∀。) } } このようなことをしたい場合、どうするのが良いか。 方法はいくつかある。 一つは、高速列挙を使わない方法。 NSMutableArray* test_1(NSMutableAr

  • Objective-CエンジニアのためのObjective-C Blocks入門 - terazzoの日記

    Mac OS X v10.6以降とiOS 4.0以降ではObjective-CにBlocksというシンタックスが追加されているらしい。 Blocks Programming Topics: Introduction http://unknownplace.org/memo/2010/05/11/1/ RubyエンジニアのためのObjective-C Blocks入門 : As Sloth As Possible 後者のエントリから引用: void (^f)(id) = ^(id x) { NSLog(@"世界の全てを敵に回しても、僕は%@の味方だ", x); }; f(@"うどん"); id型(Object)としてコレクションに突っ込んだりも出来るし、関数呼び出しのように使うこともできるらしい。つまり…どういうことなんだってばよ? てことで調べてみた。 まとめ Blocksは__NSGlo

    Objective-CエンジニアのためのObjective-C Blocks入門 - terazzoの日記
  • C/Objective-C + Blocks でクロージャ - TrashSUITE

    Blocks というのは Apple が C/C++/Objective-C 向けに独自実装したクロージャ的な機能.Snow Leopard リリース時に GCD すげぇ!という記事で見かけて『Apple やりやがった,あの変態やりやがった』くらいにしか思っていなかったのだけど,iPhone OS4.0 で使うことになりそうなので,ザックリと調べてみた ザクザクっとドキュメントを読みつつテストしつつという状態で書いたメモなので,嘘を書いている可能性が大いにある! 以下,Blocks をクロージャと呼ぶ シンプルに // 無名でダイレクトに呼ぶ ^(void) {puts("closure");}(); //=> closure ^() {puts("closure");}(); //=> closure ^{puts("closure");}(); //=> closure // 名前を付

  • [objective-c]プロトコル

    Objective-Cです。プロトコル(protocol)です。 このプロトコルはJavaでいうところのinterfaceだと思います。 説明としては、「実装が期待されてるメソッドの定義集」って感じでしょうか。 プロトコル 宣言は、@protocolで。 メソッドを記述していきます。 #import <Foundation/NSObject.h> @protocol MyProtocol - (void)mymethod; @end @interface A:NSObject <MyProtocol> @end

  • protocolと関連させたクラスの定義方法 - すぎゃーんメモ

    最近またiPhone触り始めて、新たに知ったことなどがあったのでメモ。 「delegateを持ち、自分で定義したコールバックを行うクラスの定義方法」について。 ヘッダでの宣言 例としてNSXMLParserをラップしてXMLからある要素を5回検出したときにコールバックを呼び出すようなクラスを考える。 こんなカンジで書く。 #import <Cocoa/Cocoa.h> @protocol MyXMLParserDelegate; - (void)found5statuses; @end @interface MyXMLParser : NSObject { int num; id <MyXMLParserDelegate> delegate; } @property (retain, nonatomic) id <MyXMLParserDelegate> delegate; - (void

    protocolと関連させたクラスの定義方法 - すぎゃーんメモ
  • でらうま倶楽部 : Objective-C プロトコルを最短で理解するプログラム例

    2010年07月28日16:49 カテゴリiPhoneプログラム Objective-C プロトコルを最短で理解するプログラム例 おひるごはん買いに行くのにも命がけです。 暑すぎ!! そんな暑い中、今回はObjective-Cのプロトコルについてー。まだうろ覚えなんで、指摘とか頂けると嬉しい限りです。 これとカテゴリを覚えとくとサブクラス地獄から解放されるかもしれないので覚えておいて損は無いと思います。 今制作中のアプリはテキスト処理メイン。んで、アドベンチャーゲームとかでよくある、以下のような演出も要求されていました。 テキスト表示中に背景画像を表示したり動かしたりテキスト表示中に効果音を鳴らしたり選択肢を表示して選ばせたりんで、これをいい感じに「実装をクラス別にしよう」と考えたのが事の発端。文字クラスとか背景クラスとか効果音クラスとか選択肢入力クラスとか。 この時、ルートクラスを何にし

  • ダイナミックObjective-C (32) 抽象クラスとクラスクラスタ | エンタープライズ | マイナビニュース

    抽象クラスが無い Objective-Cを形容する言葉としてよく用いられるのが、シンプル、である。なるほど、シンプルというと聞こえがいい。しかし裏を返せば、機能が少ないということだ。 例えば、Objective-Cには抽象クラスがない。正確に言えば、抽象クラスという概念はあるが、それをサポートする言語上の機構はない。Cocoaのクラス階層で、ルートクラスになるNSObjectクラスは、間違いなく抽象クラスとして設計されている。だが、プログラム上で、NSObjectのインスタンスを作ることもできる。もちろん、何の役にも立たないインスタンスだが。 このとき、「役に立たないインスタンスならば、そのようなことができないように、言語で禁止すべきだ」という考え方もあるだろう。むしろ、近年の様々な言語の拡張の傾向を見ると、こちらが主流だろう。それに対して、Objective-Cの設計を見ていると、「そん

  • フリーITエンジニアの記録 数字の3桁カンマ区切り NSNumberFormatter

    iPhone開発 3桁以上の数字はカンマを入れたほうが見やすい。 次の方法で解決。1234567 → 1,234,567 になる。 NSNumber *number = [[NSNumber alloc] initWithInt:1234567]; NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setNumberStyle:NSNumberFormatterDecimalStyle]; [fmt setGroupingSeparator:@","]; [fmt setGroupingSize:3]; NSLog(@"%@", [fmt stringForObjectValue:number]); [number release]; [fmt release]; (最初は setNumberStyle をしてい

  • 複数のHTTPリクエストを投げるときはNSOperationを使おう - A Day In The Life

    現在、iPhone SDKで簡単なマッシュアップアプリを作成中です。マッシュアップアプリなので一度の操作でいろんなところにHTTPリクエストを投げる必要があるのですが、そんな時にNSOperationを使うとものすごく便利です。NSOperationを使うことで複数のHTTPリクエストを同時並行で処理できるようになります。 使い方はいたって簡単でNSOperationクラスのサブクラスを用意して、そこでHTTPリクエストの処理をしてあげるだけです。 @interface RequestOperation : NSOperation { NSURL *url; NSMutableData *responseData; BOOL isExecuting, isFinished; } - (id)initWithURL:(NSURL *)targetUrl; @end @implementati

    複数のHTTPリクエストを投げるときはNSOperationを使おう - A Day In The Life
  • NSOperationQueueを使ったスレッド処理の簡単な例 - fn7の日記

    目的 NSOperationQueueを使った処理をする 仕様 全10スレッド生成する 3スレッドずつ動く スレッドが完了する前にプロセスが終了しないようにする ソース #import <Cocoa/Cocoa.h> @interface TTOperation : NSOperation { int number; } @property int number; @end @implementation TTOperation @synthesize number; - (id)init{ if (self = [super init]) { self.number = 0; } return self; } - (void)main { // スレッドで実行したい処理をここに書く [NSThread sleepForTimeInterval: 1.0f]; NSLog(@"test %

    NSOperationQueueを使ったスレッド処理の簡単な例 - fn7の日記
  • ダイナミックObjective-C(110) デザインパターンをObjective-Cで - Observer (2)

    前回はObserverパターンの紹介を行った。今回は、この実例をCocoaの名から探してみよう。 取り上げるのは、NSNotificationクラスである。通知と呼ばれるメカニズムを提供するものだ。 NSNotificationの構造 NSNotificationおよびそれに関連するいくつかのクラスは、イベント等の通知を行うクラスだ。Cocoaのフレームワーク内で広く使われている。 いくつかのクラスが絡んでくるので、それらを紹介しよう。前回、Observerパターンでは、ObserverとSubjectという、2つの役割が登場することを説明した。これをNSNotificationに当てはめると、SubjectはNSNotificationCenterというクラスになる。このクラスの中で、Observerクラスの参照を保持しておくのが、NSNotificationQueueというクラスだ。

  • 『NSNotificationCenterを使用してdelegateと同じようなことをする』

    以前、下記の記事でデリゲートの説明をしたけど、 Objective-C: delegateを使用する http://ameblo.jp/welx/entry-11066310316.html デリゲートを多用するとソースコードが読みづらくなるため、NSNotificationCenterを使用して同じようなことをやってみる。 NSNotificationCenterの説明をするに辺り、以前書いた記事の UIPopoverviewを使用する http://ameblo.jp/welx/entry-11065377341.html を使い回していくため、上記記事のソースコードに追記して説明していく。 今回やることはデリゲートを説明したときと全く同じ下記の二点を実装する。 1.ポップオーバー呼び出し元(ViewController)のビューにて、ラベルを一つ新規作成する。 2.ピッカー on ポ

    『NSNotificationCenterを使用してdelegateと同じようなことをする』
  • イニシャライザ

    オブジェクトの初期化 インスタンス変数を保有しているクラスの場合、その多くが初期値を必要とするでしょう。 初期化を忘れてしまった場合、適切に動作しない可能性があります。 一般的なオブジェクト指向型言語では、オブジェクトを安全に、確実に初期化するための方法としてコンストラクタを用意しています。 コンストラクタは、クラスのインスタンスが作成された直後に自動的に呼び出される特別なメソッドのことですが、Objective-C ではコンストラクタは存在しません。 その代わり、コンストラクタはルートクラスが仕様に基づいて提供する構造を採用しているため、ルートクラスの初期化用メソッドを明示的に呼び出さなければなりません。 Object ルートクラスや、Mac OS X の NSObject クラスでは、init という名前のメソッドがオブジェクトの初期化用メソッドとして定義されています。 この init

  • 光学薄膜設計ソフトの設計 その14「NSOperation実験」:腰も砕けよ 膝も折れよ:So-net blog

    さて、マルチコアを使い倒すためにはthreadを生成しなければならない。それを簡単にするためのNSOperationのお勉強。このFoundationのクラスは10.5 Leopardから使えるようになった。 Cocoaアプリでマルチコアに対応させるためにはこれまでNSThreadを使っていた。NSThreadはthreadの同期の機能はなく、自分でNSLockなどを使って実装する必要があった。注意深く作法を守らないと、つまらない理由のせいでデッドロックから抜け出せないコードになってしまうなんてことがよくある。 そのthread生成から同期、特に終了処理(子threadが全部終わるまで待つ)というのを肩代わりしてくれるのがNSOperationらしい。 マルチコアを使う用途だけでなく、ある程度時間のかかる処理をマルチスレッド化する場合にも使えるらしいので、以前数値計算のためにNSThrea

  • NSOperationQueue スレッドと処理の関係 - A Day In The Life

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

    NSOperationQueue スレッドと処理の関係 - A Day In The Life