一つの関数内で容量の大きなファイルを読み込み加工する処理を連続して行っていたらメモリが足りなくなった。 ARC ではスコープを外れ(て参照カウンタがゼロになっ)たオブジェクトは、すぐに破棄されると思っていたのでしばらくハマった。 問題のソース(ARC使用) ローカルでもWebでも何でもいいけど、ファイルから無視できない程度の容量のデータの読み込みを繰り返す処理。 - (IBAction)buttonDownWithArc:(id)sender { NSString* path = @".../bigdata.img"; for (int i = 0; i < 10000; i++) { NSData* data = [NSData dataWithContentsOfFile:path]; [NSThread sleepForTimeInterval:0.5]; data = nil; }
追記:.plistファイルを経由せずに.csvファイルを直接プログラムから読み込む方法は、 【Objective-C】.plistファイルを経由せず直接.csvファイルからデータを読み込む方法 - 夏までにiPhone アプリつくってみっか! をご参照ください。 現在作成中の縦スクロールシューティングゲームで敵の生成データをどういう形で管理しようか考えているのですが、やっぱりプログラムコードとしてデータを組み込むよりは外部ファイルから読み込むのが良いでしょう。 ということでplistファイルについて調べました。 plistファイルはXcodeのFile>New>FileからResourceを選んで出てくる選択肢の中からProperty Listを選んで作成するができます。そして、それをXcode上で編集することもできるのですが、結構編集に時間がかかります。何か便利な方法はないかと調べたとこ
プログラミング言語でnullは基本的には値がないことや変数が初期化されていないということを表す。 Objective-Cではnilはポインタが何も実体を指していないことを表現し、変数がnilのときオブジェクトを持っていない状態となる。 ただ、NSDictionaryやNSArrayはnilを格納することが出来ず、 空を格納していることを表現するためにNSNullを使う。 nilとNSNullの大きな違いとして、値がnilである変数に対してメッセージを送った場合はnilを返す。nilは(id)0として定義されている。これに対し、オブジェクトがNSNullの場合、NSNullオブジェクトに存在しないメッセージを送るとNSInvalidArgument Exceptionの例外を投げ、これをキャッチしなかった場合はクラッシュしてしまう。 nilへのメッセージの戻り値は次のコードで実験できる。 v
UIViewControllerのライフサイクルについて、何度も調べている気がするので図にまとめてみました。 ※誤った解釈があるかもしれません。お気づきの方は優しくご指摘いただけると僕が喜びます。 init 初期化処理をしている。「init」を読んでいるのに「initWithNibName:bundle:」が呼ばれるのは何故? initWithNibName:bundle: 初期化処理をしているが、初期化するUIViewControllerに紐づくxibファイルがある時に使用する。NibNameにnilを指定して呼び出しても正常に動作する。xibが無い時は「init」を呼べば良いのでnilを指定する意味は無い気がする。 initWithCoder: 初期化処理をしている。どのような時に使用するのが効果的なのか不明? loadView xibを使用しないで、画面の各種Viewをコードで作って
Objective-C のプロパティの属性を指定するとき従うべきガイドラインをまとめた。 できる限り nonatomic を指定する atomic にしてもパフォーマンスが悪化するだけでほとんどメリットがない(参考:StackOverflow - Atomic vs nonatomic properties)。 nonatomic と atomic の使い分けの指針は次のとおり: 参照型: メモリアドレスのみの書き込みなので、常にnonatomicでよい プリミティブ型: int, BOOL等ワンステップでの書き込みが可能: 常にnonatomicでよい 単一のスレッドからしかアクセスされない: 設計に気をつけつつnonatomic推奨 複数のスレッドからのアクセスがあり、long,構造体などサイズの大きい値: atomic推奨 (thx to @takasek) 複数のスレッドから同時に
iOS・Androidアプリのインスタントコード Web開発のためのTipsやチュートリアル 少しは役に立ちたいネタもろもろ 高さを詰めるのにiOS7だとコツがある。 フラットなデザインだからだとは思うんだけど、デフォルトだとセクションヘッダーが大きく見えるようになった。 以下のように、高さが0よりも大きいUIViewが必要。 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.1f, 0.1f)]; return view; } - (CGFloat)tableView:(UITableView *)tableView
データベースを扱うのに CoreDataは便利ですが、大量データの更新や保存をする際にはメインスレッドを妨害しないように別のスレッドで処理する必要があります。 ここでは CoreDataで非同期処理を行うための Tipsを紹介します。 元ネタは Multi-Context CoreData です。より詳しい解説や図解はこちらをどうぞ。 NSManagedObjectContext とマルチスレッド NSManageObjectContext は CoreDataのデータオブジェクトを管理するクラスですが、このクラスはスレッドセーフではありません。このため、マルチスレッドで CoreDataのオブジェクトを扱えるようにするにはスレッドごとに NSManageObjectContextを用意する必要があります。 iOS 5以降では initWithConcurrencyType: に NSPr
Importing data is a problem that feels like it should have a library of work ready for you to use. Especially when it comes to importing data into Core Data where you have a description of your data to work with. What if there was such a library, or reusable framework, of importing code that basically converts raw data to Core Data entities? Well, wonder no further because in this post, I’ll be di
in iOS5.0, using arc, i'm using Magical record to create objects in core data. I have a product object that has a one to many relationship called 'currentPromotions' with Promotion objects. Promotion object has an inverse relationship 'parentProduct', too. I am able to create these objects, but am stymied at how to create the relationship and attach the Promotion objects to the product using Magic
delegateやprotocolの勉強をしたいという人がいるので、なるべくわかりやすくここに書いておこう。propertyとか、delegateっていうのはObjective-Cで楽しいところでもある。 でも、delegateだけじゃなくて、他にもいろいろ非同期的な処理をやる方法あるんで、それも、まとめて説明する。 適当に思いつくだけ書くと、非同期的な処理をするために、Objective-Cでは以下のようなやり方がある。他にもあるかもしれないが、だいたいこれだけある。そして、どれを使ってもいい。 Objective-C、C/C++でも可能 ・関数のアドレスを保持しておいてコールバックする。 ・pthread条件変数を使う。(デッドロックやスレッド管理) ・非ブロッキングI/Oする。(データの検査コスト大、結局カーネル空間からユーザ空間に必要なデータをコピーするときにブロックされる) ・シ
iOSで電子書籍のようなUIを作りたい場合、UIPageViewControllerという素晴らしいUIが存在します。これを使えば、ページ移動時に「ページをペラッとめくってる」や「横へスクロール」するようなアニメーションが簡単に実装できちゃいます。とは言うものの、UIPageViewControllerは構造が少し複雑で、それを把握せずに実装しちゃうと意味不明な詰まり方をします。 そこで基礎編/Tips編と分けて自分なりに整理して書き残します。今回は基礎編なので、ざっくりとした考え方と使い方の説明となります。 UIPageViewControllerで何が出来るか 何が出来るのかについて列挙します。 複数の画面を1画面上に配置し、スワイプする事でページを閲覧する ページをめくるようなアニメーション ページを左右へスクロールするアニメーション(iOS6以降((iOS5でも行いたい場合はUIS
HOME » Natsu note » 古い投稿 » Core Data 勉強日記 (9):More iPhone 3 Development / chapter 6 (カスタムモデルの生成) Core Data 勉強日記 (9):More iPhone 3 Development / chapter 6 (カスタムモデルの生成) 2010/02/23/|古い投稿|Core Data More iPhone 3 Development: Tackling iPhone SDK 3 (Beginning) Chapter 6 のまとめ。 より詳細なデータモデルを生成していく。基礎はChapter 3で説明されているが、ここではカスタムモデルの生成を行う。 このあたりの内容は、iPhoneCoreDataRecipesというサンプルコードを見るとかなり勉強になりそう。 Attributeの設定
ちょっと宣伝です。拙作 RSS リーダー iYKRSS を iPhone 5 スクリーンで表示できるようにしました。また、iPad 版 RSS リーダー iYKRSSHD を Retina ディスプレイに対応しました。 あらかじめ登録された芸能人ブログリストから RSS フィードを簡単に選ぶことができるので、RSS リーダーを使ったことがない初心者にもお勧めです。 iYKRSS、iYKRSSHD 共に無料です。ただし、iYKRSSHD は、9月になると 85 円に戻ります。iPhone、iPod touch、iPad を持ってる人は、良かったら試しにダウンロードしてみてください。 使い方がわからない人は、気軽にコメントに書き込んでください。返事は、遅れるかもしれないのでご了承ください。 iYKRSS version 1.0.4 http://appstore.com/yoshiakikoy
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く