Category Archives: Objective-C

Objective-Cで一番簡単なプロパティ設定(w/ ARC)

0
Filed under Objective-C
Tagged as , ,

なんか、最近のObjective-Cでは、次のような宣言で使えるようなので、まとめておきます。

ARCで楽々プロパティ!

iOS 5以降で、ARCを使っている前提ですが、次のようなコードでプロパティ宣言出来て、問題なく動作するのです。

1
2
3
4
5
6
7
8
// Foo.h
#import <UIKit/UIKit.h>
@interface Foo : NSObject
 
// 外部から見えるように、ヘッダーに宣言.
@property	NSDictionary* dicInfo;
 
@end

これだけで使えるようなのです!
実装側には何も記述する必要はなく、使用する場合には(実装側(Foo.m)で使う場合にも) self.dicInfo としアクセスします。

これはObjective-C 2.0の仕様なのかな。
それともARCの恩恵?
よく分からなくなってきたけど、2013年、今はこれで出来ます!

retainとか、なんだとかもう書かなくていいんですよ!
ソー、シンプぅ!!

敢えて内部用変数名を定義する

「内部では、直接アクセスしたいよー」という時には、
実装側(Foo.m)で下記のように記述します。

1
2
3
4
5
6
@implementation Foo
 
@synthesize dicInfo=_dicInfo;
 
// ..
@end

上記のように記述しておけば、実装側(Foo.m)内では、 _dicInfo でアクセスできます。
でもねー、もう、あんまりメリットないし、これはやらなくてもいいかな。

ハードルが下がった!

初心者向けとかだったら、このブログのようにウダウダと説明するんじゃなくて、「ヘッダーで宣言(w/定義)すれば使える」と断言しても殆どの場合問題無いんじゃないかと。

ということで、
いつの間にか、かなりiOSアプリ制作のハードルが下がっている!!というお話でした。


[AD]

↓オープンソースライブラリが盛り沢山!とりあえず手元に1冊必須!

iOSオープンソースライブラリ徹底活用

著者/訳者:菊田 剛

出版社:秀和システム( 2012-12-17 )

定価:

単行本 ( 259 ページ )

ISBN-10 : 4798036277

ISBN-13 : 9784798036274


↓Unityやるならこの一冊!実際に購入し、読みました。良書です!

Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~

著者/訳者:高橋 啓治郎

出版社:ソフトバンククリエイティブ( 2011-10-01 )

定価:

Amazon価格:¥ 13,232

大型本 ( 332 ページ )

ISBN-10 : 4797365331

ISBN-13 : 9784797365337


JSONKitからNSJSONSerializationに移行

0
Filed under iOS SDK, Objective-C
Tagged as , , , , ,

iOS 5から、NSJSONSerializationApple Reference)というJSONを扱う機能が追加されています。
iOS 5がリリースされたのが2011年の10月12日。
iPhone 4S、iPhone 5なら最初からiOS 5なので、Torques Inc.では、これからのバージョンアップでは、iOS 5以降をサポート対応OSのとしても良いかと考えます
json160

JSONKitからNSJSONSerializationへ

ということで、JSONKitを使って読み込んでいたコードを変更することにしました。(JSONKitはARCに非対応ですしね!)
思っていた以上に簡単で、本当に下記のようなコピペでうまく動作しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// with NSJSONSerialization
NSData*  data     = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError* error    = nil;
NSArray* jsonData = [NSJSONSerialization JSONObjectWithData:data
    options:0
    error:&error];
 
/*
// with JSONKit
JSONDecoder* jsonDecoder = [JSONDecoder decoder];
NSArray* jsonData    = [jsonDecoder
    objectWithUTF8String:(const unsigned char *)[jsonString UTF8String]
    length:[jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
*/

上記コードで、NSArray* としている箇所は、NSDictionary* の可能性もあり、それは、jsonの内容によって決定します。
どちらの値で来るのか不明ならば、idで取得してコードで判定しましょう。

1
2
3
4
5
6
7
8
9
10
id jsonData = [NSJSONSerialization JSONObjectWithData:data
    options:0
    error:&error];
 
if( [jsonData respondsToSelector:@selector(objectForKey:)] ){
 // jsonData is NSDictionary*
}
else{
 // jsonData is NSArray*
}

しかし、iOS/iPhoneユーザーはOSアップデート率が高いから、本当に新機能を使いやすいですよね!
(An某roidとは大違い)


[AD]

↓最強のお勧めスタイラス Su-Pen(スーペン)!

iPad/iPhone用スタイラスペン(タッチペン) Su-Pen P170M-AS

iPad/iPhone用スタイラスペン(タッチペン) Su-Pen P170M-AS

定価:¥ 2,980

カテゴリ:Personal Computers


↓買ってみたら、本当に良書!初心者から経験者までお勧め!

iPhone/iPad/iPod touchプログラミングバイブル―iOS 5/Xcode 4対応 (smart phone programming bible)

著者/訳者:布留川 英一

出版社:ソシム( 2011-11 )

定価:

Amazon価格:¥ 15,020

単行本 ( 527 ページ )

ISBN-10 : 4883377954

ISBN-13 : 9784883377954


cocos2dでメモリ情報を表示+カテゴリを公開!

0
Filed under git, Objective-C
Tagged as , , , ,

最近cocos2dを使い始めたのですが、メモリ使用量などの情報表示について調べたので、その結果をまとめておきます。

メモリ情報表示コード

ネット上でサクッと次の二つの情報を見つけることが出来ました。

こちらは、標準のフレームレートを表示しているデバッグ情報のところに残りメモリ量を表示する仕組みを実現しています!
素晴らしい!

こちらは前述のサイトをベースに、「残り量」ではなくて「使用量」を表示するようにしています。
様々な環境で利用可能メモリ量は違うので、こちらのほうが有益ですね。

カテゴリがいいんじゃない!?

さて、上記サイトの実装は素晴らしいのですが、こういう機能追加こそ、Objective-Cのカテゴリ機能を使うべきだと思ったので、カテゴリで実装しなおしてgithubにて公開してみました!
(カテゴリって?という方はこちらを御覧ください→「Objective-Cの既存のクラスを拡張する仕組み « TORQUES LABS」
octocat-mini

  • HiromichiYamada/CCDirector-MemoryStats · GitHub


使い方は簡単!
CCDirector+MemoryStats.h、CCDirector+MemoryStats.m の二つのファイルをプロジェクトに追加し、ビルドするだけで、こんな感じで表示されます。
CCDirector+MemoryStats
左下に表示しているものはshowStatsメソッドで指定しているので、必要に応じてソースを書き換えてください。


[AD]

↓今回githubにリポジトリを作るときに参考にしました!

WEB+DB PRESS Vol.69

著者/訳者:大塚 弘記 渡辺 修司 堤 智代 森田 創 中島 聡 A-Listers はまちや2 川添 貴生 井上 誠一郎 近藤 宇智朗 ヒノケン 後藤 秀宣 佐藤 鉄平 mala 奥野 幹也 伊藤 智章

出版社:技術評論社( 2012-06-23 )

定価:

Amazon価格:¥ 16,426

大型本 ( 192 ページ )

ISBN-10 : 4774151041

ISBN-13 : 9784774151045


↓この書籍、購入済みなので、もうそろそろ届く頃です!

改訂2版 Objective-C逆引きハンドブック

著者/訳者:林 晃

出版社:シーアンドアール研究所( 2012-05-26 )

定価:

Amazon価格:¥ 4,104

単行本(ソフトカバー) ( 864 ページ )

ISBN-10 : 4863541058

ISBN-13 : 9784863541054


UIRefreshControl:オフィシャル版「引っ張って更新」

0
Filed under iOS SDK, Objective-C
Tagged as , , , ,

以前このブログでも書きましたがアプリ「Tweetie」で発明された「引っ張って更新」UIですが、iOS6ではOS標準のUIとして取り込まれました!
UIRefreshControl
このUIを使う手順をメモしておきます。
このUIの名前は“UIRefreshControl”です。オフィシャルリファレンスはこちら→UIRefreshControl Class Reference
使い方は洗練されていて、本当に簡単なのですが備忘録として、下記にサラッと解説を書いておきます。

生成、準備

まずは生成ですが、適当にallocし、保持しておきます。
次に、引っ張ったときのアクションを設定します。
あと、色も変えられるので、アプリに合わせて調整すると良いかもしれませんね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)viewDidLoad
{
  // viewDidLoadなどで下記コードにて初期化し、viewDidUnloadでreleaseしてください.
  UIRefreshControl* refreshControl = [[UIRefreshControl alloc] init];
  [refreshControl addTarget:self
                     action:@selector(refresh:)
           forControlEvents:UIControlEventValueChanged];
  [refreshControl setTintColor:[UIColor blueColor]];
 
  // 注:実際には、refreshControlはインスタンス変数などで保持してください.
}
 
- (void)refresh:(id)sender
{
  NSLog(@"refresh!");
  // ここにリフレッシュ時の処理を記述.
}

テーブルビューやスクロールビューに適用

さて、あとは適用すれば完了なわけです。UITableViewControllerの場合、パラメータが追加されているので、それに与えます。

1
2
// UITableViewControllerの場合.
self.refreshControl = refreshControl;

UITableViewを直接使っている場合でも、次のようにaddSubviewするだけです。

1
2
// UITableView* tableViewにくっつける場合.
[tableView addSubview:refreshControl];

また、後者の方法であれば、UIScrollView、UIWebViewにも使えるようです。

開始したり、止めたり

引っ張って更新したあとのアニメーションは自分で止めないといけません。

1
2
// 更新終了時などに呼び出します.
- (void) endRefreshing;

また、引っ張ったとき以外にもアニメーションはさせることも出来ます。

1
- (void) beginRefreshing;

便利っすねー。

iOS6未満のための対応

ちょっと悩んだのがiOS6未満のための対応。
インスタンス変数として UIRefreshControl* を持っておくとしたら、その値をどう定義するのか?
UIRefreshControlの基底クラスである UIControl* か、id のどちらかで持っておくのがよさそうです。
で使うときに (UIRefreshControl*)でキャストしてやる。例えば、下記のようなコードでとりあえず問題無いと思います。

1
2
// .h
UIControl* refreshControl;
1
2
3
4
5
6
7
8
// .m
if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0") ){
  refreshControl = [[UIRefreshControl alloc] init];
  [refreshControl addTarget:self
                     action:@selector(buttonRefreshPressed:)
           forControlEvents:UIControlEventValueChanged];
  [(UIRefreshControl*)refreshControl setTintColor:[UIColor blueColor]];
}

※上記コードのOSバージョン判定マクロについてはこちら参照してください→「iOSのバージョンをチェックするマクロ」

類似オープンソースライブラリ

以上でUIRefreshControlの説明は終わりですが、前述したようにiOS6以上でない使えないのが一番の問題です。
しかし、既にオープンソースで同様の機能、同様の見た目(!)を持つライブラリもあります!
二つほどよさそうなのがあったので紹介したいと思います。

ODRefreshControl

ほとんど同じ使い勝手、同じような見た目のものが、iOS4以上で使えるようです!
しかし、このライブラリ自体はARC必須なので、ARCを使わないプロジェクトに組み込むときにはちょっと設定が必要です。
MITライセンス。

ISRefreshControl

これはiOS5以上で使えるものですが、iOS6の場合、そのままUIRefreshControlを返すそうです!
MITライセンス。

その他

別デザインのものは、前に書いたブログを読んでくださいー。


[AD]

↓一度読んでみたいなー。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

著者/訳者:Dustin Boswell Trevor Foucher

出版社:オライリージャパン( 2012-06-23 )

定価:

Amazon価格:¥ 2,592

単行本(ソフトカバー) ( 260 ページ )

ISBN-10 : 4873115655

ISBN-13 : 9784873115658


↓githubの肝はPullRequestなのだ!という特集。

WEB+DB PRESS Vol.69

著者/訳者:大塚 弘記 渡辺 修司 堤 智代 森田 創 中島 聡 A-Listers はまちや2 川添 貴生 井上 誠一郎 近藤 宇智朗 ヒノケン 後藤 秀宣 佐藤 鉄平 mala 奥野 幹也 伊藤 智章

出版社:技術評論社( 2012-06-23 )

定価:

Amazon価格:¥ 16,426

大型本 ( 192 ページ )

ISBN-10 : 4774151041

ISBN-13 : 9784774151045