タグ

Objective-Cに関するakatakunのブックマーク (70)

  • NSOperationQueue スレッドと処理の関係 - A Day In The Life

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

    NSOperationQueue スレッドと処理の関係 - A Day In The Life
  • Deployment TargetとBase SDKと互換性について - Akata Works

    XcodeのDeployment TargetとBase SDKがややこしかったのでまとめてみました。なるべくわかりやすく書いたつもりです。「間違っているぞー」とい点があればご指摘いただけると幸いです。 前提 そもそもの話として、Appleは各種OS(Mac OSやiOS)とそのバージョンごとに異なるSDKを用意しており、それぞれの端末には対応するSDKが事前に組み込まれています。これにより以下のようなメリットがあります。 同一実行ファイルでありながら、機能が組み込まれていればそれを活用し、組み込まれていくてもそれなりに対処できる Base SDKからある程度の上位・下位バージョンへの互換性が担保できる で、この「組み込まれているか、組み込まれていないか」を判断する必要があるSDKの範囲を決めるのがDeployment TargetとBase SDKです。 Deployment Targe

    Deployment TargetとBase SDKと互換性について - Akata Works
  • [iOS] コマンドラインからUnit Testを行う - Qiita

    CI上でしか再現していないUnit Testの問題を調査している時に調べたメモを共有しておきます。 xcprettyを使うとxcodebuildが出力するログを色付きで綺麗に表示することができたり、結果を整形済みhtmlとして出力してくれるので、Xcodeによるログ出力より見やすく開発効率が上がるかもしれません。 macOS High Sierra 10.13.2 Xcode 9.2 iOSシミュレータ一覧表示

    [iOS] コマンドラインからUnit Testを行う - Qiita
  • Objective-C Automatic Reference Counting (ARC) — Clang 20.0.0git documentation

    Objective-C Automatic Reference Counting (ARC)¶ About this document¶ Purpose¶ The first and primary purpose of this document is to serve as a complete technical specification of Automatic Reference Counting. Given a core Objective-C compiler and runtime, it should be possible to write a compiler and runtime which implements these new semantics. The secondary purpose is to act as a rationale for wh

  • [Objective-C] Blocksがややこいのでまとめてみる - Qiita

    色々ややこしいBlocks。 宣言の仕方から、内部実装まで色々と調べたりしたのでメモ。 基形 まずは基形。

    [Objective-C] Blocksがややこいのでまとめてみる - Qiita
    akatakun
    akatakun 2018/06/07
    ブロックは自動変数をコピーし自身のメンバとして保持する。コピーであるため変更してももとの変数は変化しない。変化させるには自動変数の宣言に__block修飾子を付ける
  • イマドキっ子の Objective-C

    イマドキの流行に敏感なキミだったらもう知ってるかもだけど、今日はそういうのに鈍感なオジサンたちのために、今風の Objective-C について書いちゃうよ。もちろん互換性的な感じで、すぐに変えられないかもってコもいると思うけど、知っててもソンじゃないから、いま覚えとこう!それとこういうのって、けっこー変わっていくものだから、半年後とかにはもう流行後れになるから注意してね! インスタンス変数 Objective-C のインスタンス変数と言えば、ヘッダの @interface に書くというのがこれまでのルールでした。典型的な例として、以下のように書いていました。 @interface MyObject : NSObject { NSString *aString; } ... @end 今風には、インスタンス変数の宣言は実装部の @implementation に書きます。 @impleme

    akatakun
    akatakun 2018/05/31
    プライベートメソッドはカテゴリ宣言しなくてもいい
  • なぜNSStringをプロパティにする際にcopyオプションを選択すべきなのか - Qiita

    さて、NSStringをプロパティとして保持すること、たくさんありますよね。Googleのコーディング規約にもcopyにするよう書いてあります。 自分もそうしていたのですが、なぜそうしなければいけないのかというところまで考えないエンジニア失格状態だったのでちゃんと考えてみました。 さて、そもそもcopyメソッドとは何なのか? copyメソッド copyメソッドはNSObjectで定義されているのですが、copyメソッドを呼ぶとcopyWithZone:メソッドが内部的に呼ばれるようになっています。 APIリファレンスを見るとしっかりと書かれています。 Return Value The object returned by the NSCopying protocol method copyWithZone:,. copyWithZone:メソッドはNSCopyingプロトコルのメソッドです

    なぜNSStringをプロパティにする際にcopyオプションを選択すべきなのか - Qiita
    akatakun
    akatakun 2018/05/09
    プロパティにcopyが指定された時、setterは引数に対してcopyを呼び出し、copyWithZoneを経てイミュータブルなオブジェクトを設定する,これはプロパティにミュータブルなオブジェクトを設定すべきでないためである
  • Blocksを活用する事例と小技 - Qiita

    概要 Blocksはみなさんよく使いますでしょうか。 私は最初objective-cを勉強したときにBlocksのややこしい書き方を見て ああこれは絶対使えるようにならないと思ったのですが、 使えば使うほど便利な場面が多くて今ではなるべく使えないか考えるようにしています。 そこで基をおさらいつつ、どんなときに使っているか書きたいと思います。 そもそもBlocksってなに? ざっくり言うと関数を式として宣言、作成することが出来る仕組みです。 なので、関数をそのまま変数のように関数に受け渡すことが出来ます。 調べると結構説明が難しい説明がたくさん書いてあるのですが、 「関数を変数として扱える仕組み」、と覚えておけばひとまずは良いかなと思います。 書き方はこのあたりを参考にすると良いかと思います。 ■ブロック構文の基的な使い方 http://www.objectivec-iphone.com

    Blocksを活用する事例と小技 - Qiita
    akatakun
    akatakun 2018/05/09
    ざっくり言うと関数を式として宣言、作成することが出来る仕組み,APIに渡したり、必要に応じて格納したり、マルチスレッドで使用するなど
  • What is the difference between a __weak and a __block reference?

    I'm reading Xcode's documentation, and here is something that puzzles me: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; The following is copied from the documentation: A block forms a strong reference to variables it captures. If you use self within a block, the block forms a strong reference to self, so if self also has a strong reference to the b

    What is the difference between a __weak and a __block reference?
    akatakun
    akatakun 2018/05/09
    __blockと__weakの違い,
  • オートリリースプールの使い方と基本 : Objective-C プログラミング

    Objective-C では、オートリリースプールという生成した Objective-C クラスインスタンスの自動解放を行う仕組みが用意されています。 ARC (Automatic Reference Counting) の登場で Objective-C クラスインスタンスの管理も原則自動化されましたけど、内部ではこれまで通り retain や autorelease 等を駆使してメモリ管理が行われています。 そんな ARC が搭載されて久しいですけど、久しぶりにオートリリースプールに注目する機会があったので詳細を詰めてみたところ、知らないことがいくつか出てきてしまいました。 そんな訳で、今回はオートリリースプールの基も含めて、整理してみたいと思います。

    akatakun
    akatakun 2018/05/09
    ARCでは名前が"alloc", "new", "init", "copy", "mutableCopy"で始まるのメソッド戻り値は自動的にretainされ、それ以外は自動的にautoreleaseされる
  • Objective-C ARCによるメモリ管理 | YOHEI's BLOG

    Objective-Cを勉強していて一番驚いたのがメモリ管理の仕組みです。ちょっと前までは、手動メモリ管理(MRC: Manual Reference Counting)、その後、GCがMac OS Xのみに入ったけど、最近になって新たにARC(Automatic Reference Counting)が導入されたとのこと。これからはARCが主流となるとのことで、少し調べてみました。 Appleの出している資料は、おそらくこのTransitioning to ARC Release Notesのみだと思われます。でも、どのような仕組みでARCが動作しているかの情報もなく、少しわかりにくい。 おそらく一番詳しいのはClangのAutomatic Reference Countingだと思います。これを読むと、内部でどのような動作をしているのかはわかります。ただ、じゃあ実際のコーディングはどう

  • Objective-CのBlocksの循環参照とその解決策

    半年までは、Objective-Cでコールバックの処理は、delegateを使って実装していました。しかし、delegateによるコールバックは処理の繋がりが分かりにくいというデメリットがあります。 これは皆さん感じるところだと思いますが、実際に最近のObjective-C開発は、Blocksを使って記述するのがトレンドだと思います。 ただ、メモリ管理に関して少し注意しなければならない点があるので、検証結果も合わせて記していきたいと思います。(少し長くなるので2回にわけて書きたいと思います。) Blocksで処理を行う これは簡単なサンプルです。BlocksRunnerクラスは、Blocksで渡された処理を保持し、runメソッドが呼ばれた時にその処理を実行します。 int main(int argc, const char * argv[]) { @autoreleasepool { Bl

    Objective-CのBlocksの循環参照とその解決策
    akatakun
    akatakun 2018/05/08
    Blocks内部で用いる変数が「解放されていないことを保証することができない」という問題があります
  • blocksの落とし穴 - Qiita

    blocksには数多くの落とし穴があります。 しかしそれを乗り越えることができれば、非常にスマートにかける状況はそれなりに増えると思います。 ※注意:ここではARC環境での話です。一部MRCと状況が異なる場合があるかもしれません。 <blocksはObjective-cのオブジェクトをstrong参照でキャプチャする> ここでいうキャプチャとは、ポインタをコピーしている、ということです。 なんで?と思われる方も多いと思います。しかし理由ははっきりしていています。 例えば、dispatch_afterで処理を遅延することを考えてみましょう。 NSArray *sameArray = ...; int64_t delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSecon

    blocksの落とし穴 - Qiita
    akatakun
    akatakun 2018/05/08
    ブロックの実行中にブロック内から参照されているオブジェクトが解放されるのを防ぐために強参照を保持する(Objective-Cのオブジェクトのみ),ブロックの中でメンバ変数を使用すると、selfを強参照で保持する
  • もう怖くないCocoaの並列処理(GCD & NSOperation/NSOperationQueue) - $ cat /var/log/shin

    Cocoaの並列処理(GCDとNSOperation/NSOperationQueue)に関するまとめです。この記事ではいわゆる「スレッド」については扱いません。スレッドについては、前に記事を書いたのでそちらを参照してください。 Cocoaのマルチスレッドシステム - $ cat /var/log/shin スレッドによる並列処理からの脱却 スレッドは、歴史のある並列処理のための概念ですが、OSのカーネルの方にも密接に関わりがあるなど、抽象度は低めと言えます。 そこで、Cocoaでは、並列処理のための抽象度の高いインターフェースが提供されるようになりました。それがGCDとNSOperation/NSOperationQueueです。これらを使えば、スレッドを何個作成してタスクをどのように実行するか等の細かいことは、ランタイム側が全て決定してくれるので、ユーザは、並列処理したいタスクを定義し

    もう怖くないCocoaの並列処理(GCD & NSOperation/NSOperationQueue) - $ cat /var/log/shin
  • Swift - Extra Argument in call

    I am trying to call a function declared in ViewController class from DetailViewController class. When trying to debug the 'Extra Argument in call" error pops up. In ViewController class: func setCity(item : Cities, index : Int) { citiesArray!.removeObjectAtIndex(index) citiesArray!.insertObject(item, atIndex: index) } In detailViewController Class // city of type Cities ViewController.setCity(city

    Swift - Extra Argument in call
    akatakun
    akatakun 2017/10/05
    目的のメソッドのうちの2つが同じプレフィックスを持っています。不可能な余分な引数のエラーで不平を言っていました,明示的に高速な型(String、Dictionary)をObject-C型(NSString、NSMutableDictionary)に変換しなければなりま
  • SwiftでObjective-CのFrameworkを読み込む方法 - Qiita

    Objective-Cで作成されたFrameworkを読み込み、Swiftで呼び出す。 サンプルとしてGameFeatSDKを使用。 (1)Bridging-Header.hを作成 Objctive-CのFrameworkをimportするため 「GameFeatKit-Bridging-Header.h」 というヘッダーファイルを作成する。 ※「GameFeatKit」の部分は任意で変更可能。 (2)Bridging-Header.hを編集 (3)Bridging-Header.hを読み込む [Build Settings]の[Objective-C Bridging Header]に GameFeatKit-Bridging-Header.h を指定する $(SRCROOT)/$(PROJECT)/GameFeatKit-Bridging-Header.h ===== ■呼び出し方法

    SwiftでObjective-CのFrameworkを読み込む方法 - Qiita
  • iOSアプリエンジニアのための面接質問集100選 - NSBlogger

    はじめに こちらはiOS その2 Advent Calendar 2016の12月24日の記事です。 iOSアプリエンジニアが採用面接時に聞かれることってなんだろうと思い、ひねり出した100個の質問です。 ゼロベースで考えるのはさすがに困難だったので、以下に挙げられている記事をだいぶ参考にしました。 https://github.com/MaximAbramchuck/awesome-interview-questions#ios https://github.com/MaximAbramchuck/awesome-interview-questions#objective-c https://github.com/MaximAbramchuck/awesome-interview-questions#swift これらで紹介されているものは、実際にコードを見て応えるものもありますのでぜひ

    iOSアプリエンジニアのための面接質問集100選 - NSBlogger
  • viva Cocoa / Objective-C 入門

    Apr 21 . nota リリース 4月21日、nota の iPhone 版 . nota (ドット・ノタ) がリリースされました。App Store で販売中です。 iPhone version launch April 21. ". nota" (dot-nota) has been released. dot-nota is iPhone version of the nota. Is being sold in the App Store. nota を発売中。全文検索、タイムスタンプ、Mac 間での iCloud をサポートしています。現在450円で発売中 nota の購入 、 nota チュートリアル notePad も Mac 間での iCloud 対応になりました。250円 notaPad の購入 、 notaPad チュートリアル 覚書 は価格据え置きで、notePa

  • Difference between Foundation Framework and Core Foundation Framework?

    akatakun
    akatakun 2016/10/07
    Core Fundation: C言語レベルのAPI,Foundation: Objective-C言語レベルのAPI
  • 【Objective-C】staticな定数なNSArray - 忘備録

    を作ろうとして、NSStirngと同じように定義したらXcodeに怒られた。 // hoge.h extern NSArray * const kHoge; //hoge.m NSArray * const kHoge = @[@"hoge", @"fuga"]; Xcodeさん「Initializer element is not a compile-time constant」 2012-07-04 - Kazzzの日記 どうやらNSStringの要領では出来ないらしい。。。 いろいろそれっぽいやり方は出てきたけど、下記のやり方が一番しっくりくるような気がする。 iOS:配列の定数をつくりたい。 - 舞台裏メモ記 How do I declare an array as a constant in Objective-c? - Stack Overflow (2) Declare a

    【Objective-C】staticな定数なNSArray - 忘備録