GCDというマルチスレッドプログラミングが楽にかけるフレームワークを
AppleがiOS4から提供されていた事が本日行ったiOS勉強会で聞くことが出来たので、
書いておきます。
今までは、同期プログラミングは、Viewが固まる&読み込みが遅いという
ことで非同期プログラミングが使われておりましたが、
マルチスレッドにすることで、画像読み込みスレッドとメインViewスレッドとデータ読み込みスレッドを分ける事で、同期プログラミングで簡単に高速化された処理を実現することが
可能のようです。
具体的には、こちらのブログを参照下さい。
yuumi3のブログ
自己紹介
- やす↑↑
- 最近、iphoneアプリをリリースしました。
UxU
無料アプリですので、是非遊んで下さい。 第二弾アプリ:工場夜景写真集 今後も色々なアプリをリリースしていく予定です。
次は、コスプレ or 漫画 or 騎乗日記
2011年2月21日月曜日
NSStringでもクラッシュする場合がある!? =iOS開発=
通常、NSStringを使う場合は、releaseを自動的に行うのですが,
例)
NSString* img1 = [NSString stringWithFormat:@"%@",IMG_AVATER_HAIR_FRONT1];
上記の変数をループで乱発させるとメモリ不足で落ちる場合があります。
で、どのように解決するかというと
NSString* img1 = [[NSString alloc]initWithFormat:@"%@",IMG_AVATER_HAIR_FRONT1]];
[img1 release];
としても良いのですが、全てのNSStringに対して行うのは、非効率なので何か良い方法
はないかと探したところ、NSAutoreleasePoolというクラスがあり、
よって、メモリがなくなり落ちるという事が解消できます。
例)
NSString* img1 = [NSString stringWithFormat:@"%@",IMG_AVATER_HAIR_FRONT1];
上記の変数をループで乱発させるとメモリ不足で落ちる場合があります。
で、どのように解決するかというと
NSString* img1 = [[NSString alloc]initWithFormat:@"%@",IMG_AVATER_HAIR_FRONT1]];
[img1 release];
としても良いのですが、全てのNSStringに対して行うのは、非効率なので何か良い方法
はないかと探したところ、NSAutoreleasePoolというクラスがあり、
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];とすることで、間に挟んだautoreleaseする変数を一括でリリースしてくれます。
NSString* img1 = [NSString stringWithFormat:@"%@",IMG_AVATER_HAIR_FRONT1];
:
:
[pool release];
よって、メモリがなくなり落ちるという事が解消できます。
2011年2月17日木曜日
EXC_BAD_ACCESSと出た場合の対処方法
NSZombieEnabled
EXC_BAD_ACCESSは良く目にする不正終了メッセージの一つです。
そこで、実行可能ファイルの実行時引数に次のオプションを追加します。
NSZombieEnabled:YES
上記オプションを付けることで、何処でエラーしたのかをある程度教えてくれます。
NSDebugEnabled:YES
上記も同様に追加しておきましょう。
2011年2月16日水曜日
ジオコーディング実装方法 =iphone開発=
iphoneの標準フレームワークでは、逆ジオコーディングは用意されているが
正ジオコーディングがない。
ただ、標準MAPアプリでは、地域名検索が可能である。
何かないかな?と探していたところ[gmgeocoder]というフレームワークがありましたので、
ご紹介します。
ただし、これはネット接続が必要となりますので、ネットワーク接続していない場合は、
エラーとしてあげるなどの考慮は必要ですが、まぁまぁ使えます。
http://code.google.com/p/gmgeocoder/
ちなみに、DLするにはSubvertionが必要です。
「svn checkout http://gmgeocoder.googlecode.com/svn/trunk/」でDLできます。
基本的には、文字入力するので、SearchBarと一緒に使います。
//searchBar
if(geocoderSearchBar==nil)
{
geocoderSearchBar = [[[UISearchBar alloc] init] retain];
geocoderSearchBar.frame = CGRectMake(0, 0, self.view.bounds.size.width, 0);
geocoderSearchBar.delegate = self;
geocoderSearchBar.barStyle = UIBarStyleDefault;
geocoderSearchBar.translucent = YES;
geocoderSearchBar.showsScopeBar = YES;
geocoderSearchBar.placeholder =@"検索したい地域を入力して下さい";
[geocoderSearchBar sizeToFit];
[self.view addSubview:geocoderSearchBar];
}
//UISearchBarDelegate
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
TRACE();
keyboradChk = YES;
[geocoderSearchBar setShowsCancelButton:YES animated:YES];
if (theGeocoder){
[theGeocoder cancel];
[theGeocoder release];
theGeocoder = nil;
}
//具体的には、下の部分がgmgeocoderの実装部分です。
theGeocoder = [[GMGeocoder alloc] initWithAddress:searchBar.text];
theGeocoder.delegate = self;
[theGeocoder start];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[geocoderSearchBar setShowsCancelButton:NO animated:YES];
[geocoderSearchBar resignFirstResponder];
}
上記では、ジオコーディングについて
書きましたが、iPhone&android対応する為のコーディングを
地図情報関連を中心に書いた本があります。
オススメですので、一読下さい。
正ジオコーディングがない。
ただ、標準MAPアプリでは、地域名検索が可能である。
何かないかな?と探していたところ[gmgeocoder]というフレームワークがありましたので、
ご紹介します。
ただし、これはネット接続が必要となりますので、ネットワーク接続していない場合は、
エラーとしてあげるなどの考慮は必要ですが、まぁまぁ使えます。
http://code.google.com/p/gmgeocoder/
ちなみに、DLするにはSubvertionが必要です。
「svn checkout http://gmgeocoder.googlecode.com/svn/trunk/」でDLできます。
基本的には、文字入力するので、SearchBarと一緒に使います。
//searchBar
if(geocoderSearchBar==nil)
{
geocoderSearchBar = [[[UISearchBar alloc] init] retain];
geocoderSearchBar.frame = CGRectMake(0, 0, self.view.bounds.size.width, 0);
geocoderSearchBar.delegate = self;
geocoderSearchBar.barStyle = UIBarStyleDefault;
geocoderSearchBar.translucent = YES;
geocoderSearchBar.showsScopeBar = YES;
geocoderSearchBar.placeholder =@"検索したい地域を入力して下さい";
[geocoderSearchBar sizeToFit];
[self.view addSubview:geocoderSearchBar];
}
//UISearchBarDelegate
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
TRACE();
keyboradChk = YES;
[geocoderSearchBar setShowsCancelButton:YES animated:YES];
if (theGeocoder){
[theGeocoder cancel];
[theGeocoder release];
theGeocoder = nil;
}
//具体的には、下の部分がgmgeocoderの実装部分です。
theGeocoder = [[GMGeocoder alloc] initWithAddress:searchBar.text];
theGeocoder.delegate = self;
[theGeocoder start];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[geocoderSearchBar setShowsCancelButton:NO animated:YES];
[geocoderSearchBar resignFirstResponder];
}
上記では、ジオコーディングについて
書きましたが、iPhone&android対応する為のコーディングを
地図情報関連を中心に書いた本があります。
オススメですので、一読下さい。
App Store について
□アプリは 3G でダウンロード可能なサイズに
3G でダウンロード可能な 20MB 以内に納める。
□App Store のランキングアルゴリズム
当日の売上×8 + 1日前の売上×5 + 2日前の売上×5 + 3日前の売上×2 のスコアで決定されるらしい。
よって、プロモーション/キャンペーンは期間を集中させたほうが有利です。
例えば、
1.アプリ内のイベントがある場合は、その日をキーに色々なレビューサイトへ投稿
2.値下げを行う
3. TwitterやFacebookでユーザがお得に感じる文面を投稿して喚起させる
カスタムUINavigationBar
UINavigationBarに画像などを組み込みする方法
//色を変更(アプリに合う色合いにする)
[[self.navigationController navigationBar] setTintColor:[UIColor colorWithRed:0.4 green:0.1 blue:0.1 alpha:1]];
//背景画像(横320px)を変更
UINavigationBar *naviBar = [self.navigationController navigationBar];
UIImage *img = [[UIImage imageNamed:@"navigation.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:1];
UIImageView *imgView = [[[UIImageView alloc]initWithImage:img]retain];
imgView.frame = naviBar.bounds;
imgView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
imgView.layer.zPosition = -FLT_MAX;
[naviBar insertSubview:imgView atIndex:0];
[imgView release];
//色を変更(アプリに合う色合いにする)
[[self.navigationController navigationBar] setTintColor:[UIColor colorWithRed:0.4 green:0.1 blue:0.1 alpha:1]];
//背景画像(横320px)を変更
UINavigationBar *naviBar = [self.navigationController navigationBar];
UIImage *img = [[UIImage imageNamed:@"navigation.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:1];
UIImageView *imgView = [[[UIImageView alloc]initWithImage:img]retain];
imgView.frame = naviBar.bounds;
imgView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
imgView.layer.zPosition = -FLT_MAX;
[naviBar insertSubview:imgView atIndex:0];
[imgView release];
2011年2月8日火曜日
iphone,androidでヒットアプリを出す為にやらなければいけない事
私が感じた事を以下に記します。
決して、これをやれば当たるというものではございません。
ただ、これだけは【やるべき】と感じた事を並べます。
-----------------------------------------------------
[話題性]
■今、存在しないものを提供し、周りに広めたくなるようなユーザ体験を提供する
- マーケットで検索する(現状、無いことを確認してから製作に取り組む)
- 便利な仕掛 or 面白い体験
- 毎日、何気なく行っている行動にアプリを通すと有効な行動になるような仕掛
⇒通勤、仕事、デスクワーク、睡眠、食事、身支度、掃除、洗濯、散歩、買物、TV、インターネット
[実現]
■思い立ったら、吉日。
- 直に、企画書にまとめて、廻りの反応を見る。
- そして、即実行する。
[競合]
■どんなアプリがあり、何が評価されているのか調査
- 同じカテゴリ、同じ系統のアプリを無料/有料問わず調査する。
⇒ 機能をブラッシュUPしてMYアプリに組み込めるか検討する。
[宣伝]
■何処に何を仕掛けるか?
- レビューサイト ⇒ マーケット
- YouTube動画CM ⇒ マーケット or サポートサイト
- 口コミSNS(Twitter,Facebook) ⇒ マーケット
- アフリエイト広告 ⇒ マーケット
- サーチエンジン(キーワード検索) ⇒ サポートサイト[SEO/SEM対策]
- ビラ配り ⇒ サポートサイト or マーケット
- マス媒体 ⇒ 費用対効果を考えると厳しい戦略かも?
[継続]
■毎日起動すると、ラッキーな仕掛を用意しているか?
⇒ 占い、健康、ポイント、アイテム、普段何気なく毎日行っている行動と連動してイベントを起こす
■VerUpをリリース時から計算に入れておくこと
⇒ ver1.3(3回)までは、月1回ペースで上げる事。
決して、これをやれば当たるというものではございません。
ただ、これだけは【やるべき】と感じた事を並べます。
-----------------------------------------------------
[話題性]
■今、存在しないものを提供し、周りに広めたくなるようなユーザ体験を提供する
- マーケットで検索する(現状、無いことを確認してから製作に取り組む)
- 便利な仕掛 or 面白い体験
- 毎日、何気なく行っている行動にアプリを通すと有効な行動になるような仕掛
⇒通勤、仕事、デスクワーク、睡眠、食事、身支度、掃除、洗濯、散歩、買物、TV、インターネット
[実現]
■思い立ったら、吉日。
- 直に、企画書にまとめて、廻りの反応を見る。
- そして、即実行する。
[競合]
■どんなアプリがあり、何が評価されているのか調査
- 同じカテゴリ、同じ系統のアプリを無料/有料問わず調査する。
⇒ 機能をブラッシュUPしてMYアプリに組み込めるか検討する。
[宣伝]
■何処に何を仕掛けるか?
- レビューサイト ⇒ マーケット
- YouTube動画CM ⇒ マーケット or サポートサイト
- 口コミSNS(Twitter,Facebook) ⇒ マーケット
- アフリエイト広告 ⇒ マーケット
- サーチエンジン(キーワード検索) ⇒ サポートサイト[SEO/SEM対策]
- ビラ配り ⇒ サポートサイト or マーケット
- マス媒体 ⇒ 費用対効果を考えると厳しい戦略かも?
[継続]
■毎日起動すると、ラッキーな仕掛を用意しているか?
⇒ 占い、健康、ポイント、アイテム、普段何気なく毎日行っている行動と連動してイベントを起こす
■VerUpをリリース時から計算に入れておくこと
⇒ ver1.3(3回)までは、月1回ペースで上げる事。
登録:
投稿 (Atom)