Everyone involved in video game production knows that the development process is complex and vital. It is essential to be able to master it to produce a great product. However, not all companies are able to create the right workflow. Things can quickly get out of control due to poor management and chaos. It is important to understand and follow a videogame development pipeline. This is a detailed
strong __strong修飾子に対応するプロパティ属性です。strong属性を用いたプロパティは参照先オブジェクトのオーナーとなります。 weak __weak修飾子に対応するプロパティ属性です。__weak修飾子を持った変数と同様、weak属性のプロパティも、参照先のオブジェクトが破棄されたら自動的にnilが代入されます。weak属性を用いたプロパティはオーナーシップ権を持ちません。 weak属性は、delegateやOutletの変数に最適です。 なお、iOS 4では__weak修飾子が使えないため、プロパティのweak属性も使えません。この場合は、後述のunsafe_unretainedを使いましょう。 copy __strong修飾子に対応しますが、実際にはコピーオブジェクトが代入されます。copy属性を用いたプロパティは参照先オブジェクトのオーナーとなります。 unsafe
もうほとんどのかたが既知の内容と思いますが、まとめさせていただきます。 これらは全てコンパイル時に事が済む類のものなので、iOS5だけでなくiOS4でも当然使えるというのが嬉しいですね! Xcode4.4適用前 Xcode4.3までのこのコードを… #pragma mark - Private Category @interface Sample () @property (strong) NSNumber* i; @property (strong) NSNumber* c; @property (strong) NSNumber* f; @property (strong) NSArray* array; @property (strong) NSDictionary* dictionary; - (void)privateMethods1; - (void)privateMethod
せっかくMacをもっているんだから、Objective-C (Cocoa) を使ってみないともったいない気がしたんだ。 #import <Cocoa/Cocoa.h> @interface Foo : NSObject { int val; } -init:(int) v; -add:(int) v; -(int) get; @end @implementation Foo -init:(int) v { val = v; return self; } -add:(int) v { val += v; return self; } -(int) get { return val; } @end int main(void) { Foo *f = [[Foo alloc] init:5]; [f add:6]; NSLog(@"%d", [f get]); [f relese]; retur
Some suggestions: Make sure that all words are spelled correctly. Try different keywords. Try more general keywords. Split long words into pieces. CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 98 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly. CocoaPods is built with Ruby and is installable with
既にリリースしたアプリケーションでCoreDataを使っていて、既存のSQLiteのテーブルにカラムを追加したいときがある。 DBがクライアント側にあるので、Railsみたいに簡単にはマイグレーションできないだろうと思っていたけど、簡単なマイグレーションなら自動でできるらしいので調べたことをまとめておく。 Apple公式 参考資料 Core Data Model Versioning and Data Migration Programming Guide 最初に、この参考資料は一応呼んでおくべきだけど、基本的には自動マイグレーションではなく完全に手動でマイグレーションを行うための情報が記載されている。自動マイグレーションについても記載されているが、何回か読まないと具体的な手順は分かりにくかった(ちゃんと読めばわかる)。 以下のような変更例であれば自動でマイグレーションできると記載されてい
ヘッダファイルは、Encrypt.hというファイル名で #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> @interface NSData(exDigest) + (NSData *) utf8Data: (NSString *) string; - (NSData *) sha1Digest; - (NSData *) md5Digest; - (NSString *) hexString; - (NSString *) sha1String; @end mファイルは、Encrypt.mというファイル名で #import "Encrypt.h" @implementation NSData(exDigest) + (NSData *) utf8Data: (NSString *) string
こんにちは。 年明けから自転車でずっこけて頬骨を骨折→入院→手術と迷惑かけまくったiOSエンジニアの庄司です。 最近、Objective-Cのオープンソースのライブラリを読んでいて、気になった機能があり、実際につかてみて便利だったので紹介します。 概要 クラスのカテゴリ機能を使うことで、既存クラスにメソッドを追加することはできますが、インスタンス変数を追加することはできません。 「関連参照(技術書によっては「連想参照」とも言われています。)」というテクニックを使うと『あるオブジェクトに対して別のオブジェクトの追加する』ことができます。 この機能とカテゴリを組み合わせることで、継承機能を使わずにクラス定義を柔軟に拡張することができます。 通常、クラスのインスタンス変数の定義は、インターフェース部にインスタンス変数の宣言を記述すると、そのクラスのすべてのインスタンスがその変数を持つよ
「Mac OS X 10.6 Snow Leopard」は、アプリケーションやカーネルを64bitに対応させたことで性能の向上を図っている(関連記事)。 ただ、それだけでは実行速度を大きく引き上げることはできない。そこでSnow Leopardは、「Grand Central Dispatch」(GCD)と「OpenCL」というふたつの仕組みも用意している。今回はこのうち、プログラムを並列化する枠組みであるGCDについて取り上げよう。 目次 64bit対応 アプリケーションを64bit化、カーネルを64bit化、Windowsの64bit化は? Grand Central Dispatch GCDが生まれた背景、GCDとは何か?、GCDの仕組み、GCDを使ったプログラミング、GCDの今後と将来 OpenCL OpenCLが生まれた背景、OpenCLの仕組み、著名企業がサポート コラム マル
iOS 4から使えるようになったBlocksは、余計なことを気にせず気軽に使えるとてもよい拡張機能で、僕も便利にガンガン使わせてもらっています。 ただ、表向きは親切なのですが、裏側の実装は変態的なことになっており、それを理解するまで疑問に思うことや不安を感じることが多々ありました。 というわけで、自分の復習もかねて、Blocksに関して色々調べた結果をここにまとめておきます。随時追記予定&つっこみ歓迎です。 Blockの正体は構造体 下記のようにBlock変数 myblock を定義したあとでブレークさせると、XcodeのVariables Viewでその中身を見ることができます。 「myblock = (struct __block_literal_1 *) 0xbfffd490」ということなので、myblock は __block_literal_1 という型の構造体のポインタ変数で、
今回は少し自分のまとめをするためにも書きます。(今日はですます口調の気分) 以前GCDを用いた非同期について書きましたが、やめました。 簡単に別スレッドを作れてとても楽だったんですが、自分が非同期するのって今の所URLから何かダウンロードする時くらいだったので、複雑にするよりも少しシンプルに行きたいと思います。以前も書いたんですが、UITableViewCellでのNSURLConnectionを使った非同期についてです。 あの後少し意見を貰い(やっぱり書くっていいですね、たまに誰かから意見頂ける)、NSMutableDictionaryでindexPathをキーにして色々保存することがUITableViewCellを制覇するコツでした。ただ、やっぱり再利用の問題は解決出来ませんでした。 例えば、各セクションの0行目のセルにだけ画像をつけたい場合 if([picFriendsPhotos_
どうも、佐野です。今回は UIAlertView の拡張カテゴリを作って、delegate ではなく Block でコールバック処理を記述するための拡張カテゴリの作り方を紹介します。 iOS4 から Objective-C では Blocks という独自のクロージャ機能が搭載されました。これによってアニメーションの記述やコールバック処理などグッと直観的・効率的に記述できるようになったのですが、残念ながら UIKit によって提供されているクラスの多くはまだ Blocks に最適化された作りになっていません。UIAlertView もそのひとつです。 UIAlertView は、その delegate を実装することでユーザアクションに対する処理を記述する訳ですが、どうも使い勝手が悪い。例えば、同じで画面内で2通りの UIAlertView を表示するような UIViewController
アクセサを使って値をインクリメントしています。これ、ぱっと見て問題があると感じますか? このコードはマルチスレッド環境で動くため、プロパティは以下のようにデフォルトのatomicで(nonatomicを指定せず)定義されています。 @interface AtomicTest : NSObject { int count; } @property(assign) int count; - (void)increment; @end @implementation AtomicTest @synthesize count; - (void)increment { self.count++; } @end int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; A
ちょこっと掘り下げてみます まずソースをちょこっと変えます。変更点だけ。 Test01 *test = [[[aClass alloc] init] autorelease]; test.obj = [[[NSMutableArray alloc] initWithCapacity:1] autorelease]; // ここ変更 id x[2]; objプロパティに入れるインスタンスを@""からNSMutableArrayに変えただけです。これで実行すると #nonatomic MBP:~/tmp/src masaki$ time ./test 0 real 0m1.195s user 0m1.170s sys 0m0.006s #atomic MBP:~/tmp/src masaki$ time ./test 1 real 0m15.677s user 0m14.125s sys 0m
Captcha security check iosjp.com is for sale Please prove you're not a robot View Price Processing
最近話題のシンプル&リーダブルなObjective-C “Modern Objective-C”について 一度ちゃんと調べたいと思ってたので記事にしてみました。 本エントリでは、Modern Objective-Cになると何がどう嬉しいのか、 古い書き方”Legacy”と新しい書き方”Modern”の比較を通して見ていきます。 ちなみに、Modern Objective-Cの詳細については、iOS Dev Centerにて公開されている WWDC 2012の下記のセッションの資料にて詳しく説明されています。 Modern Objective-C (Patrick C Beard / Session 405) Migrating to Modern Objective-C (Session 413) また、日本語情報としては下記のエントリが参考になります。 今日からライオンでも使える!XCO
指定したクラスの、実装されているメソッドを列挙する - すぎゃーんメモの、続きのようなもの。 クラスに実装されているメソッドの一覧を取り出すことはできたので、今度は一つ一つのメソッドについての詳細を調べる。 例えばNSIndexPathの中にある"initWithIndexes:length:"というメソッドについて知りたいとき。 #import <Foundation/Foundation.h> #import <objc/runtime.h> int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; unsigned int i; size_t buf_size = 256; char *buffer = malloc(buf_size); // ターゲッ
Objective-CやCocoa touchのTIPSを書いていきます。目的はiOSアプリ開発です。 Objective-C++とは、そういう言語があるわけではなく単にObjective-Cの中でC++が使えるというだけ。 メリットは、 ・C++で記述した処理は、Objective-Cよりも高速に動作する ・C++で記述した箇所は、他のプラットフォームへ移植しやすい ・C++のライブラリが使える ・Objective-Cは嫌い。C++が好き。でもiOSアプリ作りたい人 デメリットは、 ・コンパイルが遅くなる ・コードの可読性、保守性が低下する などが挙げられる。 ライブラリなどの制約が無い限り、登場シーンは少ないだろう。 それでは、実際にどうやったら使えるようになるのか。 .mファイルの拡張子を .mm にする。 これで、Xcodeは Objective-C++ で記述していることを認識
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く