ラベル Xcode の投稿を表示しています。 すべての投稿を表示
ラベル Xcode の投稿を表示しています。 すべての投稿を表示

Xcode [Tips] 「よく使う項目バー」

2010年12月15日水曜日 | Published in , , | 0 コメント

たまたま見つけた。

メインウィンドウの上部に1行分空きが表示されるようになる。ここへファイルをドラッグ&ドロップすると Safariのようにブックマークできる。


表示制御と表示内容はプロジェクト毎に設定できる。

うまく使えば便利かもしれない。

Xcode「Objective-C 2.0 に変換...」

2010年11月20日土曜日 | Published in , | 0 コメント

Xcode には「Objective-C 2.0 に変換...」という機能がある。これは古いコードを Objective-C 2.0 から導入された Fast Enumerator と Property に変換(追加)してくれるというもの。

例えば次のクラスを定義しておいて Xcodeのメニュー「編集」から「Objective-C 2.0 に変換...」を選ぶ。
ダイアログが開くので「プロパティを使用」にチェックを付けて「プレビュー」を押す。
すると候補が表示される。必要なものだけチェックして「適用」を押すと。
こうなる。*.hファイルに @property が追加され
*.m ファイルにも @synthesize が追加される。
メンバ変数を後で追加した場合に適用した場合、その追加したメンバ変数のみ @property/@synthesize を追加してくれる。

変換対象がない場合はエラー。

適用前にファイルを選択するとどのような変更が加えられるかをプレビューできる。
iOS向け開発の場合、定番の "(nonatomic, retain)" を後から加える必要があったりするのだが、自動生成されるのは役に立つ。


もうひとつの「ループを改新」は NSEnumerator を使っている箇所を Fast Enumeration(for in〜)に変更してくれる。

最近は最初から Fast Enumeration を使うのでこちらの出番は無いだろう。

NSLog

2010年10月17日日曜日 | Published in , , | 0 コメント

[前回] Cocoaの日々: __PRETTY_FUNCTION__

NSLog でどんな情報が表示できるか少し調べてみた。

まとめ


シンボル 説明 例
__FILE__ ファイル名 /proj/classes/ViewController.m
__LINE__ ソースコードの行番号 364
__FUNCTION__ メソッド名(関数名) -[ViewController viewDidLoad:]
__PRETTY_FUNCTION__ クラス名とメソッド名 -[ViewController viewDidLoad:]


__FILE__の例


コード
NSLog(@"__FILE__: %s", __FILE__);
結果
__FILE__: /Users/hashi/Development/
 IOS-Sample-Code/XcodeMacro/Classes/ViewController.m

__LINE__の例


コード
NSLog(@"__LINE__: %d", __LINE__);
結果
__LINE__: 44


__FUNCTION__の例


クラスメソッド内

コード
+ (void)ClassFooMethodWith:(NSString*)arg1 and:(NSString*)arg2
{
 NSLog(@"__FUNCTION__: %s", __FUNCTION__);
}
結果
__FUNCTION__: +[ViewController ClassFooMethodWith:and:]


インスタンスメソッド内

コード
- (void)InstanceFooMethodWith:(NSString*)arg1 and:(NSString*)arg2
{
 NSLog(@"__FUNCTION__: %s", __FUNCTION__);
}
結果
__FUNCTION__: -[ViewController InstanceFooMethodWith:and:]

関数内

コード
void Function(NSString* arg1)
{
 NSLog(@"__FUNCTION__: %s", __FUNCTION__);
}
結果
__FUNCTION__: Function


__PRETTY_FUNCTION__の例


クラスメソッド内

コード
+ (void)ClassFooMethodWith:(NSString*)arg1 and:(NSString*)arg2
{
 NSLog(@"__PRETTY_FUNCTION__: %s", __PRETTY_FUNCTION__);
}
結果
__PRETTY_FUNCTION__: +[ViewController ClassFooMethodWith:and:]

インスタンスメソッド内

コード
- (void)InstanceFooMethodWith:(NSString*)arg1 and:(NSString*)arg2
{
 NSLog(@"__PRETTY_FUNCTION__: %s", __PRETTY_FUNCTION__);
}
結果
__PRETTY_FUNCTION__: -[ViewController InstanceFooMethodWith:and:]

関数内

コード
void Function(NSString* arg1)
{
 NSLog(@"__PRETTY_FUNCTION__: %s", __PRETTY_FUNCTION__);
}
結果
__PRETTY_FUNCTION__: Function


参考情報


NSLog:NSLog
NSLogの日本語リファレンス。書式が詳しく解説されていて役立つ。

NSLog tips and tricks - Stack Overflow
NSLogの様々な Tips。面白い。

__PRETTY_FUNCTION__

2010年10月16日土曜日 | Published in , , , | 0 コメント

@griffin_stewie さんのツィートで、__PRETTY_FUNCTION__ を NSLog() で使うと、処理中のクラスとメソッド名を表示できることを知った。
こうすると
- (void)viewDidLoad {
 :
 NSLog(@"1: %s", __PRETTY_FUNCTION__);
 :
}
こう出力される。
1: -[ViewController viewDidLoad]
おーこれは便利だ。

さらに @hkato193 さんのツィートが気になっていたので確認してみた。

こんなコードを書いた。
- (void)viewDidLoad {
 [super viewDidLoad];
 NSLog(@"1: %s", __PRETTY_FUNCTION__);
 
 [UIView animateWithDuration:1.0
 animations:^{
 NSLog(@"2: %s", __PRETTY_FUNCTION__);
 }];
 
 [UIView animateWithDuration:1.0
 animations:^{
 NSLog(@"3: %s", __PRETTY_FUNCTION__);
 }];
 [UIView animateWithDuration:1.0
 animations:^{
 [UIView animateWithDuration:1.0
 animations:^{
 NSLog(@"4: %s", __PRETTY_FUNCTION__);
 }];
 }];
}

実行結果。
1: -[ViewController viewDidLoad]
 2: __-[ViewController viewDidLoad]_block_invoke_1
 3: __-[ViewController viewDidLoad]_block_invoke_2
 4: __-[ViewController viewDidLoad]_block_invoke_4

ほー。

ソース
xcatsan's iOS-Sample-Code at 2010年10月16日 - GitHub



参考情報


Cocoaの日々: Xcode のマクロ定義

Xcode のマクロ定義

2010年10月7日木曜日 | Published in | 2 コメント

Xcodeのマクロ定義は下記が詳しい。

【Xcode】設定しておくと便利なカスタマイズいろいろ | iphoneアプリで稼げるのか

コピー元
/Developer/Applications/Xcode.app/Contents/PlugIns/
 TextMacros.xctxtmacro/Contents/Resources/ObjectiveC.xctxtmacro

これを下記へコピーする。
~/Library/Application Support/Developer/Shared/Xcode/Specifications/

後はこれに追加していけばよい。

以下はプロパティ定義文を挿入するマクロ。
 {
 Identifier = objc.property1;
 BasedOn = objc;
 IsMenuItem = NO;
 Name = "@property retain";
 TextString = "@property (nonatomic, retain) <#!statements!#>";
 CompletionPrefix = ppr;
 OnlyAtBOL = YES;
 },
 {
 Identifier = objc.property2;
 BasedOn = objc;
 IsMenuItem = NO;
 Name = "@property assign";
 TextString = "@property (nonatomic, assign) <#!statements!#>";
 CompletionPrefix = ppa;
 OnlyAtBOL = YES;
 },
 {
 Identifier = objc.property3;
 BasedOn = objc;
 IsMenuItem = NO;
 Name = "@property outlet";
 TextString = "@property (nonatomic, retain) IBOutlet <#!statements!#>";
 CompletionPrefix = ppo;
 OnlyAtBOL = YES;
 },

"ppo"と打って ESCキーを押すと下記のようになる。


同様に "ppr" "ppa" と打つと次のようになる。

なかなか便利。

Object with +0 retain counts returned to caller where a +1 (owning) retain count is expected

2010年8月28日土曜日 | Published in | 0 コメント

copyWithZone: を実装して Build And Analyze を掛けたところ下記の指摘を受けた。

Object with +0 retain counts returned to caller where a +1 (owning)
retain count is expected


原因は copyWithZone: で返すオブジェクトが autorelease となっていたため。copyWithZone: の戻りは作法として retainCount==1 として返す必要がある(呼び出し側がオーナーシップを持つ)。

NSCopying Protocol Reference
上記より抜粋:
The returned object is implicitly retained by the sender, who is responsible for releasing it.


それはそれでいいのだが、いじっているとこんな画面が出てきた。ほー。


こんな親切な説明が出てくるんだ。知らなかった。
(それだけ)

Xcode - 矩形選択

2010年7月18日日曜日 | Published in , | 0 コメント

Xcode では option キーを押しながらマウスで矩形選択ができる。

optionキーを押すとマウスカーソルが+になるので、その状態で矩形の範囲を選択する。

貼り付けるとそこへコピーした時の矩形範囲そのままで挿入される。

Xcode - Build And Analyze 〜 問題の例

2010年7月13日火曜日 | Published in | 0 コメント

[前回] Cocoaの日々: Xcode - Build And Analyze

Build And Analyze で指摘されたケースについて記録を残しておく。


Potential leak of an object allocated


メモリリークのケース

開放わすれ(NS系オブジェクト)


Appleのサンプルからコピーしてきたものだが NSCalendar* gregorian の開放ができていなかった。return前に開放コードを追加する必要がある。
[gregorian release];


開放忘れ(CG系関数)


CGImageCreateWithMask()で生成した CGImageRef が開放されていない。次のように書き直す。

CGImageRef maskImage = CGImageCreateWithMask(grayScaleImage, alphaImage);
 UIImage* grayScaleUIImage = [UIImage imageWithCGImage:maskImage];
 CGImageRelease(maskImage);


開放忘れ(UIViewController)


単純な開放忘れ。最後に開放コードを追加する。
[viewController release];


undefined or garbage value


Undefined or garbage value returned to caller


これは cell が初期化されていないのと、switch-case文で default: が定義されていないことによる。今回は下記のコードを追加した。
UITableViewCell* cell = nil;


Pass-by-value argument in message expression is undefined


これもauto変数が初期化されていないのと、switch-case文で default: が定義されていないことによる。今回は下記のコードを追加した。
EditViewController* viewController = nil;;

The left operand of '<' is a garbage value


height が初期化されていない。初期化処理を追加する。
CGFloat height = 0;



これで無事完了。

Xcode - Build And Analyze

2010年7月12日月曜日 | Published in | 2 コメント

話には聞いていたが使ったことがなかったので試してみた。


すると、あるわあるわ。ひどいもんだ。。
イージーミスが多い。


これは便利。今後は必須としたい。

Xcodeのテンプレート出力のコードが Google Objective-C Style Guide っぽくなっていた

2010年6月29日火曜日 | Published in , | 0 コメント

それだけ。

Xcode 3.2.3


@interface CoreDataRelations2AppDelegate : NSObject  {
 
 UIWindow *window;
 UINavigationController *navigationController;
@private
 NSManagedObjectContext *managedObjectContext_;
 NSManagedObjectModel *managedObjectModel_;
 NSPersistentStoreCoordinator *persistentStoreCoordinator_;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (NSString *)applicationDocumentsDirectory;
@end


Xcode 3.2.2


@interface TestAppDelegate : NSObject  {
 
 NSManagedObjectModel *managedObjectModel;
 NSManagedObjectContext *managedObjectContext;
 NSPersistentStoreCoordinator *persistentStoreCoordinator;
 UIWindow *window;
 UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
- (NSString *)applicationDocumentsDirectory;
@end


Google Objective-C Style Guide


Google Objective-Cスタイルガイド 日本語訳 | textdrop
Google Objective-C Style Guide

自分も Google Objective-C Style Guide は、一部採用(メンバ変数の後ろに _ を付ける所など)。

人気の投稿(過去 30日間)

  • 公式リファレンスの Q&A に解説がある。 Technical Q&A QA1551: Detecting the start and end edit sessions of a cell in NSTableView. 方法は Delegate と Not...
  • 2011年06月09日 追記  UITableViewCell の Identifier 設定を忘れてたので追記しました。 UINib を使うと簡単に Nib で定義した UITableViewCell が使える。 今回のサンプル: [関連] Cocoaの日々: [iO...
  • Asset Catalogには画像以外のデータも置ける。サウンドファイル(.aif)を置いてみた。 取り出すには NSDataAsset を使う。 let sound = NSDataAsset(name: name) // use sound.data 取り出したサウ...
  • パスワードを暗号化して安全に iPhone/iPad へ保管したい。iOS はこの用途の為に Keychain Services を提供している。今回は Keychain Services について調べてみた。リファレンスの内容に加え、独自に調査・検証した結果をまとめてある。動作...
  • Core Data を使ったアプリケーションで下のような検索機能を実装している。 設定された値を元に NSPredicate を作成し、Core Data に対して検索をかけるのだが、こういう場合に NSCompoundPredicate が役に立つ。 NSCompound...

AltStyle によって変換されたページ (->オリジナル) /