上のカッコの中のやつ。 Setter の作成有無の指定 指定無し: readwrite readonly setter を作らない。 readwrite setter、getterを両方作成する。readonlyプロパティをオーバーライドする時に有用。 Setter の書き方の指定 指定無し: strong (非ARCではassign) assign 渡された値をそのまま保持。 参照先のオブジェクトが消えた! -> ゾンビ状態になり、それにメッセージを送るとプログラムがクラッシュする。 weak 渡された値をそのまま保持。 参照先のオブジェクトが消えた! -> 自動的に nil に書き換え。 strong (昔のretain) 渡されたオブジェクトのオーナーシップを取得して保持。 参照先のオブジェクトが消えた! -> いやいや、そんなことはないって。 copy 渡されたオブジェクトの co
チェック1. なんでもかんでもヘッダーファイルでimportしていませんか? 例えば、こんなコードを書いていませんか? #import "OtherLibrary1.h" #import "OtherLibrary2.h" @interface Library @property (strong) OtherLibrary1* otherLibrary1; @property (strong) OtherLibrary2* otherLibrary2; @property (assign) BOOL flag; @end Libraryというクラスを作り、そこでOtherLibrary1とOtherLibrary2をpublicなpropertyとする場合、当然のごとくOtherLibrary1とOtherLibrary2のimportが必要なわけですが、なにも考えずにヘッダーファイルでO
データ転送したときに妥当性チェックにMD5を使いたい。でもどーやって計算すればいいんだろと思ってたらNSDataからMD5を計算する方法みっけ。 :-) Create MD5 Hash from NSString, NSData or a File カテゴリを使って NSData に組み込んでる。こんな感じ。 NSData+MD5.h @interface NSData(MD5) - (NSString *)MD5; @endNSData+MD5.m #import <CommonCrypto/CommonDigest.h> @implementation NSData(MD5) - (NSString*)MD5 { // Create byte array of unsigned chars unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; /
I'm guessing I would only use UIKIT_EXTERN if there is a chance of C++ code in my project that may use the variable. Right. This is the primary reason. This happens because C and C++ symbols use different naming conventions. There is a less common reason: UIKIT_EXTERN also specifies default visibility. Note: More generally, "symbol" -- not "variable" since extern could also be applied to constants
Notificationの使い方に関してはググればいくらでも出てくると思いますが、ここでは実戦向けに少しだけ掘り下げて説明出来ればと思います。 アプリケーション独自のNotification関連を定義するファイル アプリケーションのプレフィックス(大文字2文字)+Notificationという名前のファイルにNotification関連の定義をまとめておくと良いでしょう。 今回はSTNotification.hとSTNotification.mというファイルにまとめることにします。 Notification名の定義 SDKや他のライブラリの名前と重複しないようにNotification名をつける必要があります。アプリケーションのプレフィックス+Notification名+Notificationという命名規則にすると良いでしょう。 今回は以下のようなNotificationを定義します。
先日iPhoneで音を簡単に鳴らす方法を書いた。 琴線探査: iPhoneアプリで簡単に効果音などを再生するには? これはAVAudioPlayerを使う方法だったのだが、その後一つ問題があることがわかった。 iPodをバックグラウンドで再生している状態でAVAudioPlayerを使って音を再生すると、iPodの音が自動的にフェードアウトして停止してしまうのだ。 これが都合がよい場合もあるが、そうでない場合もある。今回は都合が悪かった。そこで、AVAudioPlayerと同様に簡単なAudioToolboxを使う方法に変更した。 例えばこのようにする。 /** * * システムサウンド再生完了時のコールバック用関数(Cスタイル) * (このコールバックを使うメソッドの前に定義を書く必要がある。 * ヘッダーに関数の登録をする必要は無いようだ) * */ static void onSou
HTTPレスポンスのヘッダ部文の受信完了時に呼び出される connection:didReceiveResponse: の中で NSHTTPURLResponse にキャストした response からステータスコードを取得しインスタンス変数にセットし、HTTPレスポンス受信完了時に呼ばれる connectionDidFinishLoading: の中でステータスコードに応じた処理を行う。(なにかの呪文みたいだ) ステータスコードを取得するためには NSURLResponse を NSHTTPURLResponse にキャストしてあげなきゃいけないあたり罠度が高いと言えよう。 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSHTTPURLRes
汎用ライブラリ等、ARCプロジェクトでも非ARCプロジェクトでも使用する可能性のあるクラスを実装する場合、 #if !__has_feature(objc_arc) - (void)dealloc { [super dealloc]; } #endif といった感じで "__has_feature(objc_arc)" を用いて判定を行いそれぞれの処理を書くわけですが、正直これは面倒です。 これを打開する便利なマクロを、こちらで発見しました。 下記マクロを定義しておけば、 #ifndef AH_RETAIN #if __has_feature(objc_arc) #define AH_RETAIN(x) x #define AH_RELEASE(x) #define AH_AUTORELEASE(x) x #define AH_SUPER_DEALLOC #else #define __A
I have the following simple code to connect to a SSL webpage NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url]; [ NSURLConnection sendSynchronousRequest: urlRequest returningResponse: nil error: &error ]; Except it gives an error if the cert is a self signed one Error Domain=NSURLErrorDomain Code=-1202 UserInfo=0xd29930 "untrusted server certificate". Is there a way to set i
基本編 1. Objective-Cで書く Obj-C使いたくないが諦める 結局Obj-C使うのが一番楽であることに気づくのだ 2. Xcodeを使う VimとかEmacsとかAppCodeで書きたいが諦める 結局Xcode使うのが一番楽であることに気づくのだ 設計編 3. 仕様とUIをしっかり設計してから実装する きちんと設計しないとあとから大量の手戻りが発生して泣きたくなる。 技術的に可能なことをやろうとしているのか 基本的な画面設計 メインのビュー部分 ナビゲーション方法(TabBarなのかNavigationBarなのかNavigationDrawerなのか) くらいは最低限調査・設計しておく 4. フレームワーク的ライブラリを使わない UIKitは既に十分にフレームワークになっており、新たな思想を持ち込む必要はない Reactive Cocoaを使うのはUIKitのMVCをよくよ
@propertyの属性にcopyとかstrongとかweakとかあるけど、概念的な説明はどこでもあるけど、具体的な説明をしている記事が少ないので調査した。 Xcode4.3.2時点での内容です。 nonatomic 非スレッドセーフにする。マルチスレッドのものを使わない限りはどんどん指定しよう。 ちなみにatomicな場合は内部的にはgetterは以下のような処理になる模様。ロックが入ってしまう。 [_internal lock]; id result = [[value retain] autorelease]; [_internal unlock]; return result; getter/setter getterとsetterのメソッド名はデフォルトで、getterは変数名と同じ、setterはset[Capitalize変数名]だが、それを任意のものに設定することができる。
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
以下のような方法でURLエンコード/デコードできると書かれているサイトが沢山あるが、大嘘つきもいい所だ。特殊文字を取りこぼしまくってる。 //encoding NSString *escapedUrlString = [plainString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; //decoding NSString *decodedUrlString = [escapedUrlString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 多分これで全部フォローできていると思うが、もし足りない文字があればコメントで教えて欲しい。 //encoding NSString *escapedUrlString =
I have an app with a UITableView and a corresponding detail view for each row. In the detail view I have to display some text and a background image (text is different for each row, but the image remains the same). The easiest way, in my opinion, is to put the text in an .rtf file and display it in a UIWebView. Then just put a UIImageView behind the UIWebView. I've tried to set the UIWebView's opa
処理が終わったら(サンプルでは2秒間のウェイトが入れてある) contentInsets.top = -60 へ戻してやる。すると最初のヘッダが隠れた表示に戻る。なお contentInsets も UIViewアニメーションの対象なので +[UIView animateWithDuration:aniamations:] を使うとヘッダが隠れるまでがアニメーションになる(逆に使わないと一瞬で切り替わり、やや不自然になる)。 コードではヘッダの表示制御用にメソッドを用意してある。こんな感じ。 - (void)_setHeaderViewHidden:(BOOL)hidden animated:(BOOL)animated { CGFloat topOffset = 0.0; if (hidden) { topOffset = -self.headerView.frame.size.heig
Tweetのidが64ビットになってたので。 NSNumberから取り出すにはunsignedLongLongValueを使う: uint64_t tweetId = [tweetIdNumber unsignedLongLongValue]; 逆にNSNumberに変換するにはnumberWithUnsignedLongLong:もしくはinitWithUnsignedLongLong:を使う: NSNumber *tweetIdNumber = [NSNumber numberWithUnsignedLongLong:tweetId]; NSNumber *tweetIdNumber = [[NSNumber alloc] initWithUnsignedLongLong:tweetId]]; NSStringやNSLogに使うフォーマット指定子には%lluを使う: NSString
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く