Piyo Piyo iOS開発Note | スタディノート随時更新！

ヒヨッコがピヨピヨと開発するときのtipsです。

[@fakestarbaby](http://twitter.com/fakestarbaby)さんの記事[iOS/Objective-C★Note | スタディノート随時更新！](http://qiita.com/items/0744685acaad906e60d6)もどうぞ。

---

# apple coding sample

spaceのとり方とか参考にしたい。appleのsample codeを参考にすれば良いはず。

詳しくは、[Learning Objective-C a primer](http://developer.apple.com/library/mac/#referencelibrary/gettingstarted/learning_objective-c_a_primer/_index.html)を参照のこと。


## property

* 基本的に各リテラル間にspace入れる
* 後述のmethod定義とは真逆

```
@property (nonatomic, strong) IBOutlet UIWindow *window;
```

プロパティの変数はアンダバーから始まる名前で定義する。

```
@synthesize window = _window;
```

## variable

ポインタ変数定義は、以下のように ```型 スペース *変数名``` とする。

```
UIView *piece = gestureRecognizer.view;
```

以下のようにも書けるが避ける
```
UIView* piece = gestureRecognizer.view;
```

## method定義

* 基本space空けない

```
- (NSString *)pathForTestImage:(NSUInteger)imageNumber;
```


## method実装

* 基本space空けない
* ```{}``` の書き方

```
- (void)addGestureRecognizersToPiece:(UIView *)piece
{

}
```

## method実行

* 引数の後ろはspaceなし
* ```[]``` に対するメソッド指定時はspace空ける

```
infoFileURL = [[NSBundle mainBundle] URLForResource:@"Info" withExtension:@"html"];
```

## if文など制御文

```{}``` がmethod定義と違うので注意。

```
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {

}
```

## pragma mark

Delegateの実装ごとに分けると見やすくなる。

```
#pragma mark - ApplicationDelegate -
```

---
# Objective-Cでiosアプリ開発 おれおれスペニット
## Function Menu を整理する
```objective-c
#pragma mark - HogeFugo -
```

## 任意のコードからAppDelegateを参照する
```objective-c
  AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
```

## deallocではrelease後に確実にnilにしておくこと
```objective-c
- (void) dealloc
{
    [_var release], _var = nil;
}
```

## I18n参照
```objective-c
[self setTitle:NSLocalizedString(@"key_for_your_string", "explain for this string")];
```

## UIWebViewのUserAgentを指定
AppDelegateのinitializeでしか変えられない。

```objective-c
# AppDelegate.m
+ (void)initialize 
{
    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"your_user_agent", @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    
}
```

## gist

* [UIUtilitiy](https://gist.github.com/3058199)
* [facebook-ios-sdk sample](https://gist.github.com/3058189)
* [DEBUG or not](https://gist.github.com/3147667)

---
#Objective-Cでiosアプリ開発 おれおれメモ

## apple

* [Provisiongin Portal](https://developer.apple.com/ios/manage/overview/index.action)
* [iOS Developer Library](https://developer.apple.com/library/ios/navigation/) sample code, documentなど
* [Get started with your iOS Developer Program](
https://developer.apple.com/jp/programs/ios/gettingstarted/) 初めてのiOS開発

## 入門

* [iPhoneアプリの開発方法 for Flash Professional CS5 前編](http://www.adobe.com/jp/devnet/flash/articles/iphone_flash_1.html) 認証周り

## assets
* [iOSでの開発に必要なアセット](http://qiita.com/items/6ddfc6fa726911d5d7fd)

## oauth
* [スマートフォン ネイティブアプリからの OAuth 認証についての悩み](http://qiita.com/private/fa3615b928bcc0237992)

## UIWebView
* [UIWebViewなどで使うクッキーを再起動しても維持する方法](http://tech-gym.com/2011/10/objective-c/506.html)

## CoreData

* [Core Data Overview : 重要なクラス](http://blog.natsuapps.com/2010/09/core-data-overview_5352.html)
* [CoreDataをActiveRecord風に扱えるMagicalRecordの使い方](http://tech-gym.com/2012/01/objective-c/612.html)

## environment
* [.gitignore for objective-c](http://qiita.com/items/53a203aec408a06bf4e1)
* [CocoaPods ではじめる Objective-C ライブラリ管理 (1)](http://d.hatena.ne.jp/Watson/20111204/mac_dev_jp_advent_calendar_cocoapods01)
* [CocoaPods / Objective-C 向け ライブラリ/パッケージマネージャの紹介](http://iphone-dev.g.hatena.ne.jp/laiso/20111117/1321437909)

## library
* [AFNetworking](https://github.com/AFNetworking/AFNetworking/)
* [AsyncImageView](https://github.com/nicklockwood/AsyncImageView)
* [facebook-ios-sdk](https://github.com/facebook/facebook-ios-sdk/)
	* [facebook-ios-sdk sample](https://gist.github.com/3058189)
* [DDPageControl](http://www.ddeville.me/2011/01/ddpagecontrol-a-custom-uipagecontrol/) PageControlの痒いところまでカスタマイズ可能なやつ

## test
* [Installing CHUnit](http://gabriel.github.com/gh-unit/docs/index.html)
* [GHUnitで単体テストをしてみよう](http://alpha.mixi.co.jp/2012/10858/)
* [iOSで使えるBDDスタイルのテスティングフレームワーク「cedar」の導入方法](http://tech-gym.com/2012/01/objective-c/630.html)

## 審査

* [Appleのアプリ審査ガイドライン、UIWebViewに関係するリジェクト事例](http://meme.efcl.info/2011/08/appleuiwebview.html)

## book
* [詳解 Objective-C 2.0 第3版](http://www.amazon.co.jp/gp/product/4797368276)
	* Objective-C自体を学ぶために必読
* [改訂2版 Objective-C逆引きハンドブック](http://www.amazon.co.jp/gp/product/4863541058)
* [iOSプログラミング逆引きリファレンス108 ~知りたいことがすぐわかるiPhoneプログラミングテクニック~](http://www.amazon.co.jp/gp/product/483993777X)
	* 上記のObjective-C逆引きハンドブックとは違いiOSで書くときの逆引き集。
	* まぁそれなりに参考になるかも知れない
* [よくわかるiPhoneアプリ開発の教科書【Xcode 4対応版】](http://www.amazon.co.jp/gp/product/4839939039)
	* 頻繁に改定されているのでもっと新しいモノあるかも知れない
	* iosアプリの作り方を超ざっくり知るには良い
* [
iOSデバッグ＆最適化技法 for iPad/iPhone ](http://www.amazon.co.jp/gp/product/4798028053)
	* デバック方法に言及してる唯一の書籍かも知れない
	* メモリリークのこととかちゃんと教えてくれる。
	* メモリリークを意識して開発するためにはマジ必読感ある
* [iOS開発におけるパターンによるオートマティズム](http://www.amazon.co.jp/gp/product/4861007348)
	* 実践的なパターン集
	* 特にCoreData周りが良い
* [iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン](http://www.amazon.co.jp/gp/product/4873115027)
* [iOSプログラミング 第2版](http://www.amazon.co.jp/gp/product/4864010498)
	* 圧倒的に良い。
	* 実践的で良い
	* Amazon古い記述があるという批判あるけど、そんなもん読み替えろ。もしくは原書の新しい方を読めという印象
	* iOSでの開発の実践書という意味でマジ必読感ある
* [エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド](http://tatsu-zine.com/books/objc)
	* 読んだ本がARCに対応していなくて、、、みたいなひとはこれ読んで、読み替えればok
	* BlocksはAFNetworkingでガンガン使うので覚えておくと良い