久しぶりのiOSネタ。
ALAssetから引っ張ってきたPNG(スクリーンショット)画像をUIImageViewに表示して、これをボタンで高速でめくっていくと「メモリ足りない」って落ちる現象に遭遇。
ゆっくりページめくりしている時は大丈夫。
【ALAssetからdefaultRepresentationを取得し、その後UIImageに変換してUIImageViewにセットする】だけの簡単な処理だけど、高速でめくるとreleaseする前に次の画像を取ってきてしまうので落ちる。落ちる前に手を止めると、メモリのグラフがガタガタと下がっていく。
一瞬、「めくる速度を制限しようか」という悪魔の声が聞こえたけど、それは最後の手段として取っておくことにした。
でも、__weak試したりnil代入しても状況は変わらない。
最終的には上記【】の処理を@autoreleasepool {}で囲って強制的に掃除したらスクリプトで超高速めくりを実行してもメモリサイズは安定したままで落ちなくなった。
いやはや。
それにしても、どうしてこういう問題は、定時で帰る5分前に発生するのでしょうか。15分ぐらいで解決できたから良いんだけど。
2014年8月18日月曜日
2013年8月25日日曜日
Force.com mobile SDK 2.0 for iOS
【重要なお知らせ】新プロジェクトはコマンドライン
前のバージョンまでは、XcodeのFile->New->New Project...でHyblid Force.com App / Native Force.com REST Appを選べばすぐにプロジェクトができていましたが、2.0ではコマンドラインから作る必要があります。簡単ですけども。【重要なお知らせ】ARCに対応しました!
Xcode 5はARC対応のプロジェクトしか作れないですし。それにARC、慣れてしまえばそんなに悪いヤツじゃないですよw■大まかな手順■
- gitからcloneしてbuild
- テンプレートをbuild
- では、新しいプロジェクトを
参考ページは以下。
https://github.com/forcedotcom/SalesforceMobileSDK-iOS
以前より増えた分(テンプレートのbuild)
https://github.com/forcedotcom/SalesforceMobileSDK-iOS/blob/master/build.md
■gitからcloneしてbuild■
まず、適当なディレクトリに移動して、ターミナルから以下のコマンドを実行します。git clone https://github.com/forcedotcom/SalesforceMobileSDK-iOS.git
回線速度にもよりますが、数十秒程度。終了してプロンプトが出たら、次はgitが作ったプロジェクトの中に異動してビルドします。
cd SalesforceMobileSDK-iOS/
./install.sh
これは回線やマシンの速度の応じてやっぱり数十秒から数分。SSDだと妙に速くて感動です。以前はこれでXcode用のテンプレートが自動的にインストールされていたのですが。
■テンプレートをbuild■
それではテンプレートをbuildします。
cd build/
ant
今度はそれほど時間かかりません。
■では、新しいプロジェクトを■
cd artifacts/cd NativeAppTemplate/ または cd HyblidAppTemplate/
./createApp.sh
これでテンプレート生成シェルから使い方が出てきます。
Usage:
createApp.sh
-t <Application Type> (native, hybrid_remote, hybrid_local)
-n <Application Name>
-c <Company Identifier> (com.myCompany.myApp)
-g <Organization Name> (your company's/organization's name
[-o <Output directory> (defaults to this script's directory)]
[-a <Salesforce App Identifier>] (the Consumer Key for your app)]
[-u <Salesforce App Callback URL] (the Callback URL for your app)]
[-s <App Start Page> (defaults to index.html for hybrid_local, and /apex/VFStartPage for hybrid_remote)]
では、素直にプロジェクトを作ってみます。com.company / companyはあなたご自身のものを使ってください。蛇足ですが。
./createApp.sh -t native -n TestForceMobile20 -c com.company -g company
ほんの一瞬で以下のメッセージが出来て終了します。
Creating app in SalesforceMobileSDK-iOS/build/artifacts/NativeAppTemplate/TestForceMobile20
Successfully created native app 'TestForceMobile20'.
あとは適当なディレクトリにコピーして、.xcodeprojをダブルクリックすればXcodeが起動します。
■プロジェクトについて■
コマンドラインで生成した時に指定しなかった場合にはAppDelegate.mのRemoteAccessConsumerKeyとOAuthRedirectURIを設定します。生成されたコードはばっちりARC対応です。__weakが邪魔っすね。まだ慣れません。AppDelegate.mは1.xよりはかなり洗練されていて、いじりやすくなりました。例によってStoryboardには対応していませんが、setupRootViewControllerでnibではなくStoryboardから生成されるようにすれば問題ないはずです。
取り急ぎ、以上。
登録:
投稿 (Atom)