0
はじめてのiOS開発
はじめてのiOS開発    iOS開発の醍醐味をflash開発してきた人間からの視点で   簡単にまとめました。
はじめてのiOS開発•   メモリ管理•   画像キャッシュ•   マルチスレッド処理•   iOSのバージョン、デバイスの違い
メモリ管理
メモリ管理flash開発におけるメモリ管理は・・・
メモリ管理flash開発におけるメモリ管理は・・・   ガベージコレクション。
メモリ管理  ガベージコレクション、つまり   使用しなくなったメモリをプログラム側が勝手に開放してくれる。 それによりメモリリークをふせぐ。
メモリ管理iOS開発におけるメモリ管理は・・・
メモリ管理 iOS開発におけるメモリ管理は・・・リファレンスカウントによるメモリ管理。
メモリ管理リファレンスカウントによるメモリ管理とは・・・
メモリ管理リファレンスカウントによるメモリ管理とは・・・        簡単にいうと、
メモリ管理リファレンスカウントによるメモリ管理とは・・・        簡単にいうと、     確保(alloc)したメモリは  必要がなくなったら解放(release)する
メモリ管理メモリの解放漏れがあると・・・
メモリ管理メモリの解放漏れがあると・・・メモリリークが発生して・・・
メモリ管理   メモリの解放漏れがあると・・・    メモリリークが発生して・・・アプリケーションがクラッシュ(落ちる > < )
メモリ管理でも・・・
メモリ管理ARCを採用
メモリ管理ARCとは・・・
メモリ管理      ARCとは・・・コンパイラがメモリ管理を行ってくれる!!
メモリ管理         つまり   確保(alloc)したメモリは必要がなくなったら解放(release)する
メモリ管理         つまり   確保(alloc)したメモリは必要がなくなったら解放(release)する releaseを書く必要がなくなった!
メモリ管理これでメモリ管理については気にしなくてよくなった!?
メモリ管理   もちろん楽にはなったが、全く気にしなくていいわけではない。。。
メモリ管理例1)テーブルビューセルの再利用
メモリ管理例1)テーブルビューセルの再利用
メモリ管理                                 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAt...
メモリ管理                                 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAt...
メモリ管理                                 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAt...
メモリ管理                                 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAt...
画像キャッシュ
画像キャッシュ      flash開発ではサーバから取得する画像のファイルサイズは    あまり気にしてこなかった
画像キャッシュiOS開発では
画像キャッシュ      iOS開発では3G回線における画像の読み込み時間は   かなりクリティカル。
画像キャッシュ画像が表示されるのに時間がかかる、こんなアプリやってられない!!  ユーザが離れていく。。。
画像キャッシュより最適な画像キャッシュの機構をつくる
画像キャッシュ サーバ       CDN       ブラウザキャッシュ ユーザflash開発
画像キャッシュ サーバ                 サーバ       CDN       ブラウザキャッシュ ユーザ                 ユーザflash開発              iOS開発
画像キャッシュ サーバ                 サーバ       CDN                 CDN       ブラウザキャッシュ ユーザ                 ユーザflash開発              ...
画像キャッシュ サーバ                 サーバ       CDN                 CDN                           ディスクキャッシュ       ブラウザキャッシュ ユーザ     ...
画像キャッシュ サーバ                 サーバ       CDN                 CDN                           ディスクキャッシュ       ブラウザキャッシュ         ...
画像キャッシュ サーバ                       サーバ       CDN                       CDN                   通信発生                   通信しない  ...
マルチスレッド処理
マルチスレッド処理flash(ActionScript3.0)開発は   シングルスレッド処理。
マルチスレッド処理      iOS開発ではマルチスレッドプログラミングが可能。
マルチスレッド処理マルチスレッドプログラミングって     必要なの??
マルチスレッド処理   YES!
マルチスレッド処理 描画やタッチイベント処理は メインスレッドで行われる。そのため画像の読み込み処理などは   別スレッドで行う。
マルチスレッド処理これってどういうこと??
マルチスレッド処理     画像を読み込みつつ、スクロールの操作ができていることがわかる
マルチスレッド処理これってどういうこと??
マルチスレッド処理これってどういうこと??→ 快適なユーザビリティ
マルチスレッド処理どうやって書く??
マルチスレッド処理     どうやって書く??GCD(Grand Central Dispatch)
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      //ここに別スレッドの処理      dispatch...
iOSのバージョン、デバイスの違い
iOSのバージョン、デバイスの違い•   iOS5.x. / 6.x.•   1,136 x 640 / 960 x 640 ピクセル解像度
iOSのバージョン、デバイスの違い  iOS5.x. / 6.x. による違い 一例
iOSのバージョン、デバイスの違い              iOS5.x. / 6.x. による違い 一例•   “Auto Layout”機能•   SNS関連フレームワーク•   shouldAutorotateToInterfaceOr...
iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例                             こういう対応したんだから                         ...
iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in...5
×

flasherがはじめてiOS開発をしてみて

2,406

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,406
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "flasherがはじめてiOS開発をしてみて"

  1. 1. はじめてのiOS開発
  2. 2. はじめてのiOS開発 iOS開発の醍醐味をflash開発してきた人間からの視点で 簡単にまとめました。
  3. 3. はじめてのiOS開発• メモリ管理• 画像キャッシュ• マルチスレッド処理• iOSのバージョン、デバイスの違い
  4. 4. メモリ管理
  5. 5. メモリ管理flash開発におけるメモリ管理は・・・
  6. 6. メモリ管理flash開発におけるメモリ管理は・・・ ガベージコレクション。
  7. 7. メモリ管理 ガベージコレクション、つまり 使用しなくなったメモリをプログラム側が勝手に開放してくれる。 それによりメモリリークをふせぐ。
  8. 8. メモリ管理iOS開発におけるメモリ管理は・・・
  9. 9. メモリ管理 iOS開発におけるメモリ管理は・・・リファレンスカウントによるメモリ管理。
  10. 10. メモリ管理リファレンスカウントによるメモリ管理とは・・・
  11. 11. メモリ管理リファレンスカウントによるメモリ管理とは・・・ 簡単にいうと、
  12. 12. メモリ管理リファレンスカウントによるメモリ管理とは・・・ 簡単にいうと、 確保(alloc)したメモリは 必要がなくなったら解放(release)する
  13. 13. メモリ管理メモリの解放漏れがあると・・・
  14. 14. メモリ管理メモリの解放漏れがあると・・・メモリリークが発生して・・・
  15. 15. メモリ管理 メモリの解放漏れがあると・・・ メモリリークが発生して・・・アプリケーションがクラッシュ(落ちる > < )
  16. 16. メモリ管理でも・・・
  17. 17. メモリ管理ARCを採用
  18. 18. メモリ管理ARCとは・・・
  19. 19. メモリ管理 ARCとは・・・コンパイラがメモリ管理を行ってくれる!!
  20. 20. メモリ管理 つまり 確保(alloc)したメモリは必要がなくなったら解放(release)する
  21. 21. メモリ管理 つまり 確保(alloc)したメモリは必要がなくなったら解放(release)する releaseを書く必要がなくなった!
  22. 22. メモリ管理これでメモリ管理については気にしなくてよくなった!?
  23. 23. メモリ管理 もちろん楽にはなったが、全く気にしなくていいわけではない。。。
  24. 24. メモリ管理例1)テーブルビューセルの再利用
  25. 25. メモリ管理例1)テーブルビューセルの再利用
  26. 26. メモリ管理 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UnitTableViewCell *cell = (UnitTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"UnitTableViewCell"]; if (cell == nil) { NSLog(@"cellを新規に生成"); UINib* nib = [UINib nibWithNibName:@"UnitTableViewCell" bundle:nil]; NSArray* array = [nib instantiateWithOwner:nil options:nil]; cell = [array objectAtIndex:0]; } [cell setData:[_dataList objectAtIndex:indexPath.row]]; return cell;}
  27. 27. メモリ管理 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UnitTableViewCell *cell = (UnitTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"UnitTableViewCell"]; if (cell == nil) { NSLog(@"cellを新規に生成"); UINib* nib = [UINib nibWithNibName:@"UnitTableViewCell" bundle:nil]; NSArray* array = [nib instantiateWithOwner:nil options:nil]; cell = [array objectAtIndex:0]; } [cell setData:[_dataList objectAtIndex:indexPath.row]]; return cell;} セルがすでに生成されていれば、 セルはそのまま再利用して別のデータをセットしてあげる
  28. 28. メモリ管理 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UnitTableViewCell *cell = (UnitTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"UnitTableViewCell"]; if (cell == nil) { NSLog(@"cellを新規に生成"); UINib* nib = [UINib nibWithNibName:@"UnitTableViewCell" bundle:nil]; NSArray* array = [nib instantiateWithOwner:nil options:nil]; cell = [array objectAtIndex:0]; } [cell setData:[_dataList objectAtIndex:indexPath.row]]; return cell;} _canvas = [[CanvasView alloc] initWithUnitData:data.unitData]; [self addSubview:_canvas];
  29. 29. メモリ管理 例1)テーブルビューの再利用- (UnitTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UnitTableViewCell *cell = (UnitTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"UnitTableViewCell"]; if (cell == nil) { NSLog(@"cellを新規に生成"); UINib* nib = [UINib nibWithNibName:@"UnitTableViewCell" bundle:nil]; NSArray* array = [nib instantiateWithOwner:nil options:nil]; cell = [array objectAtIndex:0]; } [cell setData:[_dataList objectAtIndex:indexPath.row]]; return cell;} _canvas = [[CanvasView alloc] initWithUnitData:data.unitData]; [self addSubview:_canvas]; このメソッド内でインスタンスを生成→メモリリーク!!
  30. 30. 画像キャッシュ
  31. 31. 画像キャッシュ flash開発ではサーバから取得する画像のファイルサイズは あまり気にしてこなかった
  32. 32. 画像キャッシュiOS開発では
  33. 33. 画像キャッシュ iOS開発では3G回線における画像の読み込み時間は かなりクリティカル。
  34. 34. 画像キャッシュ画像が表示されるのに時間がかかる、こんなアプリやってられない!! ユーザが離れていく。。。
  35. 35. 画像キャッシュより最適な画像キャッシュの機構をつくる
  36. 36. 画像キャッシュ サーバ CDN ブラウザキャッシュ ユーザflash開発
  37. 37. 画像キャッシュ サーバ サーバ CDN ブラウザキャッシュ ユーザ ユーザflash開発 iOS開発
  38. 38. 画像キャッシュ サーバ サーバ CDN CDN ブラウザキャッシュ ユーザ ユーザflash開発 iOS開発
  39. 39. 画像キャッシュ サーバ サーバ CDN CDN ディスクキャッシュ ブラウザキャッシュ ユーザ ユーザflash開発 iOS開発
  40. 40. 画像キャッシュ サーバ サーバ CDN CDN ディスクキャッシュ ブラウザキャッシュ メモリキャッシュ ユーザ ユーザflash開発 iOS開発
  41. 41. 画像キャッシュ サーバ サーバ CDN CDN 通信発生 通信しない ディスクキャッシュ ブラウザキャッシュ メモリキャッシュ ユーザ ユーザflash開発 iOS開発
  42. 42. マルチスレッド処理
  43. 43. マルチスレッド処理flash(ActionScript3.0)開発は シングルスレッド処理。
  44. 44. マルチスレッド処理 iOS開発ではマルチスレッドプログラミングが可能。
  45. 45. マルチスレッド処理マルチスレッドプログラミングって 必要なの??
  46. 46. マルチスレッド処理 YES!
  47. 47. マルチスレッド処理 描画やタッチイベント処理は メインスレッドで行われる。そのため画像の読み込み処理などは 別スレッドで行う。
  48. 48. マルチスレッド処理これってどういうこと??
  49. 49. マルチスレッド処理 画像を読み込みつつ、スクロールの操作ができていることがわかる
  50. 50. マルチスレッド処理これってどういうこと??
  51. 51. マルチスレッド処理これってどういうこと??→ 快適なユーザビリティ
  52. 52. マルチスレッド処理どうやって書く??
  53. 53. マルチスレッド処理 どうやって書く??GCD(Grand Central Dispatch)
  54. 54. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });});
  55. 55. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });}); たったこれだけ。
  56. 56. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });}); たったこれだけ。 でも・・・
  57. 57. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });}); 書き方間違えるとダメー。
  58. 58. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });});並列処理してはいけないものをここに書くと・・・ EXE_BAD_ACCESS(ヌルポ)でクラッシュ。。。
  59. 59. マルチスレッド処理dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ここに別スレッドの処理 dispatch_async(dispatch_get_main_queue(), ^{ //ここにメインスレッドの処理 });});こちらに描画の更新処理を書いてあげないと、、、 画面が一切更新されない!!
  60. 60. iOSのバージョン、デバイスの違い
  61. 61. iOSのバージョン、デバイスの違い• iOS5.x. / 6.x.• 1,136 x 640 / 960 x 640 ピクセル解像度
  62. 62. iOSのバージョン、デバイスの違い iOS5.x. / 6.x. による違い 一例
  63. 63. iOSのバージョン、デバイスの違い iOS5.x. / 6.x. による違い 一例• “Auto Layout”機能• SNS関連フレームワーク• shouldAutorotateToInterfaceOrientationがiOS6で deprecatedに
  64. 64. iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
  65. 65. iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例 こういう対応したんだから そんな大変じゃないんじゃ ないの??
  66. 66. iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
  67. 67. iOSのバージョン、デバイスの違い1,136 x 640 / 960 x 640 ピクセル解像度による違い 一例
  68. 68. ご清聴ありがとうございました。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×