Mais conteúdo relacionado
Semelhante a flasherがはじめてiOS開発をしてみて (20)
flasherがはじめてiOS開発をしてみて
- 2. はじめてのiOS開発
iOS開発の醍醐味を
flash開発してきた人間からの視点で
簡単にまとめました。
- 3. はじめてのiOS開発
• メモリ管理
• 画像キャッシュ
• マルチスレッド処理
• iOSのバージョン、デバイスの違い
- 15. メモリ管理
メモリの解放漏れがあると・・・
メモリリークが発生して・・・
アプリケーションがクラッシュ(落ちる > < )
- 19. メモリ管理
ARCとは・・・
コンパイラがメモリ管理を行ってくれる!!
- 20. メモリ管理
つまり
確保(alloc)したメモリは
必要がなくなったら解放(release)する
- 21. メモリ管理
つまり
確保(alloc)したメモリは
必要がなくなったら解放(release)する
releaseを書く必要がなくなった!
- 23. メモリ管理
もちろん楽にはなったが、
全く気にしなくていいわけではない。。。
- 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. メモリ管理
例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. メモリ管理
例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. メモリ管理
例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];
このメソッド内でインスタンスを生成→メモリリーク!!
- 31. 画像キャッシュ
flash開発では
サーバから取得する画像のファイルサイズは
あまり気にしてこなかった
- 33. 画像キャッシュ
iOS開発では
3G回線における画像の読み込み時間は
かなりクリティカル。
- 37. 画像キャッシュ
サーバ サーバ
CDN
ブラウザキャッシュ
ユーザ ユーザ
flash開発 iOS開発
- 38. 画像キャッシュ
サーバ サーバ
CDN CDN
ブラウザキャッシュ
ユーザ ユーザ
flash開発 iOS開発
- 39. 画像キャッシュ
サーバ サーバ
CDN CDN
ディスクキャッシュ
ブラウザキャッシュ
ユーザ ユーザ
flash開発 iOS開発
- 40. 画像キャッシュ
サーバ サーバ
CDN CDN
ディスクキャッシュ
ブラウザキャッシュ
メモリキャッシュ
ユーザ ユーザ
flash開発 iOS開発
- 41. 画像キャッシュ
サーバ サーバ
CDN CDN
通信発生
通信しない
ディスクキャッシュ
ブラウザキャッシュ
メモリキャッシュ
ユーザ ユーザ
flash開発 iOS開発
- 49. マルチスレッド処理
画像を読み込みつつ、
スクロールの操作ができていることがわかる
- 53. マルチスレッド処理
どうやって書く??
GCD(Grand Central Dispatch)
- 63. iOSのバージョン、デバイスの違い
iOS5.x. / 6.x. による違い 一例
• “Auto Layout”機能
• SNS関連フレームワーク
• shouldAutorotateToInterfaceOrientationがiOS6で
deprecatedに