忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。




ポインタ間が何byte離れているか取得する方法

わか

あるデータファイルを読み込んだ際に、あるポインタ(ptr1)とあるポインタ(ptr2)が判明していて、その間のbyte数を取得したい場合がありました。
今回は複数ポインタのアドレス間が何byte離れているかを取得する方法について記載します。
unsigned long byteNum = (unsigned long)ptr2 - (unsigned long)ptr1;
上記記載方法で取得できます。ptr2がptr1より後である必要がありますが。 備忘録でした。

拍手[0回]


NSDataのdataWithBytesNoCopyやinitWithBytesNoCopyのfreeWhenDoneの意味

わか

NSDataのdataWithBytesNoCopyやinitWithBytesNoCopyメソッドのfreeWhenDoneについて記載します。dataWithBytesNoCopyやinitWithBytesNoCopyとは指定したデータ用メモリからNSDataを生成するメソッドです。メモリを再利用することができるので、無駄なコピーが発生せず効率的です。
ただ、使用する際にはメモリ解放処理を生成したNSDataに任せるか、指定したデータ用メモリに任せるかをきちんと決めておかないとエラーになるかもしれません。

引数にfreeWhenDoneが存在します。これを用いて解放処理を誰に任せるか設定できます。
・YES: 生成したNSDataが解放された際に、元のデータ用メモリを解放する
・NO:  生成したNSDataが解放されても、元のデータ用メモリを解放しない

また、引数にfreeWhenDoneを指定しない場合、「YES」が設定されていることになります。
備忘録でした。

拍手[0回]


autoresizingMaskのviewサイズは固定

わか

autoresizingMaskを使用すると回転時のviewのサイズを自動で適切なサイズに変換してくれます。

iPhone5  iOS7.1.1 
autoresizingMaskを設定しているUITableViewのframeサイズを、生成される際の回転位置から生成していました。( Portrait(縦持ち)(320,568)、Landscape(横持ち) (568,320) )
するとLandscape時に画面は真っ黒になりました。
なので、画面サイズを(320,568)に固定すると問題なく表示されました。

画面サイズの変更はautoresizingMaskがやるので、手動で変更してはいけないいうことでしょう。

拍手[0回]


renderInContextのキャッシュをすぐに解放する方法

わか

ARC環境下にてlayerのrenderInContextを使用した後、すぐにキャッシュが解放されない問題が発生しました。しばらくすると解放されましたが、連続で使用した場合、解放される前にメモリ不足で落ちました。
あれこれ調べてみると、UIGraphicsEndImageContextの前にview.layer.contents = nil;を追加するとキャッシュがすぐに解放されるようです。
忘れがちになりそうなので、メモしておきます。

拍手[1回]


Allocationsの見捨てられたメモリについて

わか

instrumentsで見捨てられたメモリについて概要を記載します。

見捨てられたメモリ
メモリリークとは異なる。何らかの理由で確保されたが、使用されていない領域のこと。
実装を中断した中途半端なコードが残っている。データを重複して保存するような箇所がある。Allocationsにてある処理を繰り返して分析する技法「世代分析」して確認する。
Allocationsで検出可能

拍手[0回]


scrollsToTopが効かない場合の対応方法

わか

UIScrollviewにはscrollsToTopプロパティがあり、ステータスバーをタップすると一番上までスクロールする機能があります。デフォルトはYESです。
また、UIScrollviewは「UITableView、UIWebView、UICollectionView、UITextView」のsubviewsに含まれます。
今回、scrollsToTopがYESなのにステータスバーをタップしても一番上に移動しなかったので原因と対応方法を記載します。

拍手[0回]


Settings.bundleのローカライズ方法について

わか

XcodeのSupporting Files内にSettings.bundleを作成すれば、OSの設定アプリに設定項目を追加できます。ここにはアプリのバージョンや初期化設定を記載するのが一般的なようです。
一般的にはあまり使われていないような気もします。

ローカライズすることで多言語を表示できますが、すこし迷った部分があったので記載します。

拍手[0回]