ページ

2009年12月13日日曜日

今週のCocoa情報(12/13) - 今週気になった Cocoaプログラミング情報の紹介

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Objective-C accessor declarations (readonly, readwrite, etc) - Stack Overflow

プロパティを外部には readonly として公開し、クラス内部では readwrite として使う方法が紹介されていた。
以下、コードを引用する。

in the book, "Cocoa Design Patterns," the author sometimes declares a property in the @interface as readonly:
// .h
@property (readonly, copy) NSArray *shapesInOrderBackToFront;
and then later adds an unnamed category to the implementation (.m) file like this:
// .m
@interface MYShapeEditorDocument ()
@property (readwrite, copy) NSArray *shapesInOrderBackToFront;
@end
なるほどカテゴリを使うのか。


Creating an IMP from an Objective-C block - Stack Overflow

block と IMP 間の変換についての話題。

質問者は Objective-C で F-Script/Smalltalk 相当のブロックの記述について取り組んでいる。

A new metaclass for Objective-C

※以下、このサイトからの引用

例えば F-Script でこんなコードがあったとする。内容はクラスを動的に定義し、最後にそれをインスタンス化して呼び出すというもの。
Dog := FSClass newClass:'Dog'.
Dog addProperty:'name'.
Dog addProperty:'breed'.
Dog onClassMessage:#dogWithBreed:
                do:[ :self :breed |  |instance|
                     instance := self alloc init.
                     instance setBreed:breed.
                     instance
                   ].
Dog addClassProperty:'kingdom' withValue:'Animalia'.
Dog onMessage:#bark do:[ :self | stdout print:'Yipe!' ].

pet := Dog dogWithBreed:'Aussie'.
pet setName:'Tucker'.
pet bark.
これを Objective-C で書けるようにコードを作り、最終的にはこんなコードになった。
JSClass *Dog = [JSClass newClass:@"Dog"
                          parent:[NSObject class]
                      properties:[NSArray arrayWithObjects:@"name",@"breed",nil]];
[Dog onClassMessage:@selector(dogWithBreed:)
                 do:^(id Self, NSString *breed) {
                       id instance = [[Self alloc] init];
                       [instance setBreed:breed];
                       return [instance autorelease];
                 }];
[Dog addClassProperty:@"kingdom" withValue:@"Animalia"];
[Dog onMessage:@selector(bark) do:^(id _self) { NSLog(@"Yipe!"); }];
id pet = [Dog dogWithBreed:@"Aussie"];
[pet setName:@"Tucker"];
[pet bark];
これは面白い。

F-Script Home


Keychain Services

Keychain の利用を考えていて少ししらべてみた。iPhoneで使えるとは知らなかった。

Mac Dev Center: Keychain Services Programming Guide: Introduction

Mac Dev Center: Keychain Services Reference

CocoaDev: KeyChain

cocoaでの keychain プログラミングサンプル。参考になる。
http://homepage.mac.com/agerson/examples/keychain/

ラッパーライブラリ
Extendmac — EMKeychain