タグ

Objective-CとProgrammingに関するMuneOchiのブックマーク (15)

  • CoreData の NSManagedObject のサブクラスを変更する場合はカテゴリを使うと便利 - 24/7 twenty-four seven

    CoreDataのモデルクラスはXcodeのモデルエディタから自動生成しますが、生成されたクラスにメソッドを追加したりしたいことがあると思います。 そのとき、自動生成されたファイルを直接変更してしまうと、モデルに変更がありモデルクラスを再生成したときにその変更が上書きされてしまいます。 そこで、カテゴリを使って追加部分は別のファイルに分けておくと、モデルクラスを再生成しても後から追加した部分は上書きされずに残るのでそのまま使えます。 例えば下記のようなクラス (Event.h) があるとして、条件でフェッチするメソッドや、日付をフォーマットして返すメソッドを Event+CoreData.h/m や Event+Formatter.h/m として別ファイルに定義します。 // Event.h #import <Foundation/Foundation.h> #import <CoreDa

    CoreData の NSManagedObject のサブクラスを変更する場合はカテゴリを使うと便利 - 24/7 twenty-four seven
    MuneOchi
    MuneOchi 2013/04/16
    NSManagedObject のサブクラスのメソッド追加
  • 2009-08-12

    初期値設定 引数が設定されていなかったら、指定した初期値を設定して処理を続ける func(){ local arg1=${1:-default1} echo $arg1 }変数を指定した場合 $ func test test指定していない場合 $ func default1 文字列から指定した文字を削除する 先頭、もしくは末尾からであれば、sedやperlを使うまでもない。 先頭の場合には、「#」末尾の場合には「%」を使う target="1234567890"先頭の123を削除 echo ${target#123}末尾の890を削除 echo ${target%890}先頭の3文字を削除 echo ${target#???}末尾の3文字を削除 echo ${target%???}先頭の4までを削除 echo ${target#*4}末尾の7までを削除 echo ${target%7*}フ

    2009-08-12
    MuneOchi
    MuneOchi 2013/03/15
    NSDate 文字列 曜日
  • NSOperationQueue スレッドと処理の関係 - A Day In The Life

    iOS4 になって NSOperationQueue クラスの仕様に追加がありました。以前は並列処理しか出来なかったのですが mainQueue メソッドが追加になり逐次処理も出来るようになりました。変更点も含めて NSOperationQueue の使い方をまとめてみます。 NSOperationQueue クラスの使い方をきちんと理解していると NSOperation クラスの非並列実行モードと並列実行モードの使い方を間違えることも少ないと思います。 NSOperation クラスについては以下の記事で詳しく説明しています。 NSOperation 非並列実行モードと並列実行モードの使い分け NSOperationQueue と NSOperation の関係 NSOperationQueue と NSOperation を使うと、バックグラウンドで何か処理をしたい場合に一連の処理をま

    NSOperationQueue スレッドと処理の関係 - A Day In The Life
  • Cocoaの日々: CoreData - マイグレーションを考慮した CoreDataManager パターン

    CoreData を使うアプリであればこの程度の件数はすぐに行くので、起動時にマイグレーションが走ると確実に落ちてしまう。これを防ぐためには起動時に CoreData へアクセスさせないのが最低限の対策になるが、その場合でもユーザが CoreData へアクセスする操作を行った瞬間にマイグレーション処理に時間がかかって画面が固まったようになるのでユーザビリティは良くない。 マイグレーションを考慮したパターン よって CoreDataを使うアプリではマイグレーション用の画面を用意するのがベスト。処理フローはこんな感じ。 起動 ↓ (1)マイグレーションチェック もし必要なら、マイグレーション用の画面へ遷移し、(2)マイグレーション実行 ↓ 通常画面マイグレーションチェックは NSPersistentCoordinator を使えばわかる。 Cocoaの日々: [iOS][Mac] CoreD

    Cocoaの日々: CoreData - マイグレーションを考慮した CoreDataManager パターン
    MuneOchi
    MuneOchi 2012/10/25
    CoreData Migration
  • Objective-Cの可変長引数: プログラミングが好き!

    プログラミング好きが、プログラミングのためのソフトウエア開発周辺の興味ある分野を勉強する記録。プログラミング言語、IT、ICT、情報処理技術、設計技法、数値計算、データベース、システム、SCM、画像処理、開発環境、ツールなどなど。 Objective-Cのメソッド中でも可変長引数を使うことは可能。ただしC言語のstdargを使うので基的な内容は同じ。 - (NSString*)stringJoin:(int)cnt withObjects:(NSString*)str,... { id array = [NSMutableArray arrayWithCapacity:cnt]; va_list argp; va_start(argp,str); [array addObject:str]; int i; for(i=0;i<cnt-1;i++) { id ival; ival = va

    MuneOchi
    MuneOchi 2012/10/16
    Objective-C 可変長引数
  • iOS でオブジェクトをシリアライズしてファイルに保存する方法 - A Day In The Life

    iOS でデータを永続化する方法の続きです。今回はシリアライズされたオブジェクトの保存方法について説明します。シリアライズされたオブジェクトはファイルで保存することが容易なためデータ永続化の際に頻繁に使用されます。 シリアライズ自体はデータの保存に限らず、Interface Builder やネットワークを使ったデータの送受信などいろいろなところで使われています。 プログラマであれば必ずおさえておきたい技術の一つです。 シリアライズって何? オブジェクトの状態をバイナリ(0と1の集まり)に変換することをオブジェクトのシリアライズまたはシリアル化といいます。逆にバイナリをオブジェクトに変換することをデシリアライズといいます。 シリアライズされたデータは iOS 上では NSData オブジェクトとしてあつかわれます。NSData オブジェクトはそのままファイルに保存することができます。 iO

    iOS でオブジェクトをシリアライズしてファイルに保存する方法 - A Day In The Life
    MuneOchi
    MuneOchi 2012/10/11
    自作クラスのオブジェクトをアーカイブしてファイルに保存する
  • iOSアプリ開発のメモリ管理で気をつけること - A Day In The Life

    Objective-C での開発にだいぶ慣れてきたのですが、いまだメモリ管理まわりでハマることが多いのでまとめてみました。 メモリを確保してから解放するまでの流れ メモリを確保してから解放するまでの流れは以下の図のようになります(図はアップルのサイトから引用)。 alloc または init すると参照カウントが1になります alloc または init 系メソッドを呼ぶと参照カウントが1になります。 このように書いたのは、クラスの仕様によって alloc メソッドで retainCount が1になるオブジェクトと init 系のメソッドで retainCount が1になるオブジェクトがあるためです。alloc と init はセットで呼ばれることがほとんどなのでこの違いが問題になることはないと思いますが念のため。 int main() { /* allocで参照カウント1 */ NS

    MuneOchi
    MuneOchi 2012/03/10
    memory management NSTimer
  • そのUI, まずはCocoa Controlsで探してみよう - プログラミングノート

    iOS Advent Calendar 9日目担当のntakuです。 もし、iOS開発する上で一番大変なことはなんですか?と聞かれれば間違いなくUIの開発!と答えます。同じ価値や機能を提供するにしても、使っていて気持ちが良いUIであるかどうかでアプリの評価は大きく変わってくると思います。 何がベストなのか、はやはり実際にプロトタイプを作ってみないと分からないわけですが、あのアプリのUIをちょっと真似してみようと思ったり、このアプリと同じように作ってくださいと言われるとそれだけで数日かかってしまうこともざらにあります。 そんなことを繰り返していると中々アプリが完成しないわけなのですが、その期間を少しでも短縮するために、私が開発する際に活用しているのがCocoa Controlsというサイトです。 Cocoa Controls Cocoa ControlsはiOSやMax OS X開発者が開発

    そのUI, まずはCocoa Controlsで探してみよう - プログラミングノート
  • Ustream.tv: ユーザー sazameki: [Sazameki] iOS 5プログラミング 2012/01/07 13:02, [Sazameki] iOS 5プログラミング 2012/01/07 13:02. コンピュータ...

    [Sazameki] iOS 5プログラミング 2012/01/07 13:02 484 視聴数 長さ: 94:27 [Sazameki] iOS 5プログラミング 2012/01/07 13:02 埋め込みコード:録画 <iframe src="http://www.ustream.tv/embed/recorded/19617376" width="608" height="368" scrolling="no" frameborder="0" style="border: 0px none transparent;"></iframe> カスタム: 横幅: px 高さ: px 古いエンベッドコードを使う <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="296"

  • Objective-Cでの真偽値型 - ちくわプログラマにっき

    BOOL bool Boolean Objective-C内で使える真偽値型として次の3つがあるのだけど、どれを使うのが正しいのかよくわからない。 実は型だけではなく値の方もいくつかある。 true TRUE YES こうなると、boolにYESを入れればいいのか、BOOLにtrueを入れればいいのかもうなんだかよくわかんなくなっちゃったので簡単にまとめてみた。 BOOL Objective-C 標準の真偽値型(なのかな) 真 YES 値は1 偽 NO 値は0 /* objc.h */ ... typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_D

    Objective-Cでの真偽値型 - ちくわプログラマにっき
    MuneOchi
    MuneOchi 2012/02/02
    Objective-CではBOOL,YES,NO を使うのが標準らしい
  • 【コラム】ダイナミックObjective-C (8) カテゴリ - 動的なメソッドの追加によるクラスの拡張 | エンタープライズ | マイコミジャーナル

    今回からは話を変えて、Objective-Cの別の側面を紹介しよう。メソッドの宣言、実装にまつわる話だ。まずは、カテゴリから始めよう。 カテゴリによるクラスの分割 Objective-Cには、カテゴリと呼ばれる機能がある。クラスが持つメソッドを、名前の通りカテゴリごとに分類するための機能だ。これを使うことで、大きなクラスでもコーディングしやすいように分割する、といったことができる。 例を示そう。Objective-Cでは、メソッドの定義は@interface ClassNameという形で行うが、メソッドをカテゴリに分類するときは、@interface ClassName (Category)という文法を使う。次の例では、Documentというクラスを宣言し、そのクラスにPersistenceというカテゴリを追加している。このカテゴリは、書類の読み書きに関するメソッドを担当するようにしてみた

    MuneOchi
    MuneOchi 2011/09/14
    #ios_dev クラスをカテゴリを使って分割すると、それぞれ別のオブジェクトとしてコンパイルされる。そしてランタイムに読み込まれた時点で、もとのクラスにカテゴリで宣言されているメソッドが追加されていく
  • 『iOS4にしたらNSOperationが動かなくなったときの解決法』

    iPhone SDK4.0になり、マルチスレッド関連にもかなりの変更が加えられました。その一つの影響として、NSOperationの仕様も変わっています。 何も考えずにisConcurrentをYESにして組んでいたアプリはiOS4では動かなくなる可能性があります。 最も影響を受けるのは、NSURLConnectionによるHTTPリクエストをNSOperationを使っていた場合でしょう。NSURLConnectionをマルチスレッドで使うには、かなり丁寧に実装してあげないと動かなくなります。 手っ取り早いのはNSOperationQueueの生成を以下のように明示的にメインスレッドの呼び出しに変更することです。 // alloc,initは、iPhone3.xでisConcurrent=NOの時、およびiOS4では別スレッドで起動される // iPhone3.xでisConcurren

    『iOS4にしたらNSOperationが動かなくなったときの解決法』
    MuneOchi
    MuneOchi 2011/09/12
    #ios_dev NSOperationQueue mainQueue
  • Cocoaの日々: UIScrollView - サムネイル画像を並べて指でスクロールさせる

    UIScrollView について直接使ったことが無いので調べてみた。 情報&サンプル iPhone OS Reference Library に解説とサンプルがある。 UIScrollView解説 Scroll View Programming Guide for iPhone OS スクロールサンプル Scrolling 2種類の UIScrollView を使ったサンプルプログラム。 サンプルは基的なところが押さえられているので参考になる。 ポイント UIScrollView を使うのは簡単で次の2つをやるだけでいい。 1. UIScrollView.contentSize にスクロール対象ビューの全体の大きさを設定する 2. スクロール対象ビューを UIScrollView へ追加する 検証 解説とサンプルを参考にして簡単なプログラムを組んでみた。複数の画像を横へ並べてスクロール

    Cocoaの日々: UIScrollView - サムネイル画像を並べて指でスクロールさせる
  • 【コラム】ダイナミックObjective-C (104) プロパティ(4) - プロパティの属性 | エンタープライズ | マイコミジャーナル

    プロパティの話も4回目になった。今回は、プロパティの属性の話をしよう。実際にプロパティを使ったプログラミングをしていると、適切な属性の設定がとても大切だということに気づくだろう。 属性の文法 属性とは、プロパティを修飾するものになる。プロパティを設定したコードをコンパイルすると、それに合わせたアクセッサメソッドを作ってくれるのだが、このメソッドの種類や動作について、いくつかの細かい設定を可能にするのが属性だ。 文法としては、@property指示子の後に、括弧を付けて指定することになる。複数の属性を指定するときは、カンマで区切る。たとえば、次のコードではassignとreadwriteという2つの属性を指定している。 @property (assign, readwrite) NSString* value; どんな属性が定義されているのか、詳しく紹介しよう。 アクセサの名前と種類 プロパ

    MuneOchi
    MuneOchi 2011/07/01
    プロパティを設定したコードをコンパイルすると、それに合わせたアクセッサメソッドが自動で作られる。
  • clangでObjective-Cプログラムを静的解析

    はじめに 今回は、clangの静的解析機能を紹介します。 LeopardのOpenGLに採用されたことでも知られる、LLVMというコンパイラプラットフォームがあります。clangはLLVM内のプロジェクトのひとつで、gccに変わるC/C++/Objective-C用のLLVMフロントエンドを開発しています。 複数のAppleエンジニアが開発に参加しており、Objective-Cを積極的にサポートしているのも特徴です。 clangでは、通常のコンパイラとして以外にもコードの内部構造にアクセスするいくつかの機能があり、そのひとつが静的解析機能です。 プログラムの静的解析 プログラムを実行せずにプログラムの問題点・バグなどを分析することを「静的解析」といいます。 最近では、JavaのFindBugsが有名ですね。 人力で行うコードレビューも、静的解析と言われることもあります(そりゃそうでしょう

  • 1