タグ

objective-cに関するDOISHIGERUのブックマーク (113)

  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

  • Super Technique 講座~マクロの技

    質的にC言語はトリッキーな言語ではない。だから、トリッキーな技は特定機能に集中する傾向があり、そのような機能とは「マクロ」と「ポインタ」である。 引数展開マクロの小技 DRY原理とプロトタイプ宣言 グローバル変数管理 関数ポインタ配列のプロトタイプ宣言と定義 引数展開マクロの小技 一般論としては、マクロは define 文によって即値定数を記号定数で定義しなおす、というのが真っ当な技であるが、これは今更触れるほどの内容はない。それでも次のようなテクニックはある。 #define swap(type,a,b) {type tmp=a;a=b;b=tmp;} int x = 10; int y = 20; swap( int, x, y ); これは引数展開マクロを使って、いわゆるSWAPを実現する簡単なマクロである。よく類書にこれは「次のように使うと問題がある」とされる。 if( z )

  • C 言語 マクロ講座 ## 実用編: uyota 匠の一手

    ## の使い方だが、個人的に主に使うのは次の二つの場合だ。型違いの同じ関数をいくつも作りたい時。そして、複数の関数ポインタを含む構造体の配列を初期化する時。今回は前者の例をあげる。 各型に適した fread と fwrite を書くことにしよう。今回は、int 型、char 型と double 型を実装する。 % cat read_x.c #ifndef LIB #include #endif #define FREAD(type) \ size_t fread_ ## type(void *p, FILE* fd) \ { \ return fread(p, sizeof(type), 1, fd); \ } #define FWRITE(type) \ size_t fwrite_ ## type(void *p, FILE* fd) \ { \ return fwrite(p, si

  • Kurusugawa – Kurusugawa Computer Inc.

    ビジネスに役立つ AI をお届けします 来栖川電算は AI 技術の研究開発から応用まで幅広いサービスを提供する名古屋工業大学発ベンチャー(2003 年設立)です。未踏ソフトウェア創造事業の採択者やソフトウェア分野の様々なコンテストの入賞者が在籍しています。最先端の AI 技術だけでなく、膨大な高品質データを生み出す技術、ハードウェアの限界性能を引き出す実装技術、高品質なソフトウェアを実現する設計技術にも定評があります。 手軽に使える様々な認識エンジン 来栖川電算の認識エンジンを活用すれば、センサーデータに埋め込まれた意味を手軽に抽出できます。種類ごとに用意された認識エンジンは教師データや設定を変えるだけで様々なタスクへ応用できます。LinuxAndroid・iOS 用のライブラリ、WebAPI、コマンドラインツールなどプログラマフレンドリーな SDK を提供しています。トレーニングやコン

    Kurusugawa – Kurusugawa Computer Inc.
  • マクロをもっと活用せよ (1) « New White 4.90

    C言語には「マクロ」と言うものがあります。 多くの人は定数宣言くらいにしか使っていないかと思います。 人によっては、const宣言で定数を定義しているかも知れません。 C時代では、非常に簡素な関数を定義する際、パフォーマンスを上げるためにマクロが使用されました。 ・・・が、C++ではそれもinline関数として置き換えられていたりします。 (しまいには、/が使えるような新しいCコンパイラでは、C言語なのにinlineが使えたりもするみたいです) 型名のリネームでさえ、typedefと言う更に便利がものがあります。 ・・・所詮、マクロなんてものは、古き時代の名残の産物でしかないのでしょうか・・・? いいえ、そんな事はありません。 マクロにしか出来ない事はまだまだ沢山あります。 例えばよく使われるマクロとして、次のようなものがあります。 #define SAFE_RELEASE(p)

  • PRE00-C. 関数形式マクロよりもインライン関数やスタティック関数を使う

    PRE00-C. 関数形式マクロよりもインライン関数やスタティック関数を使う マクロは危険である。物の関数と同じように使えるが、セマンティクスが異なるからである。C99 からは、C 言語仕様にインライン関数が追加されている。インライン関数とマクロのどちらでも使える場合には、インライン関数の方を使うようにすべきである。関数をインライン関数として定義すると、例えば、通常の関数呼出しの仕組みの代わりに インライン置換 が行なわれることで、処理速度の向上も期待できる。(「PRE31-C. 安全でないマクロの引数では副作用を避ける」、「PRE01-C. マクロ定義中で参照する引数名は括弧で囲む」、および「PRE02-C. マクロ置換リストは括弧で囲む」を参照のこと。) インライン置換は、テキストの単なる置き換えではなく、また、新しい関数を作成することもない。例えば、その関数体内で使われるマクロの

    PRE00-C. 関数形式マクロよりもインライン関数やスタティック関数を使う
  • pine -program diary-: C 言語 & 疑似テンプレートによるスタックの実装

  • 曲がった迷路その34 - NSThreadとNSAutoreleasePool:腰も砕けよ 膝も折れよ:So-net blog

    前回の続き。このまま休みに入ると何をやってたのか忘れてしまうのでキリがいいところまで書いておく。 世間で言われているようにNSOperationのmainメソッドの中でAutoreleasePoolのインスタンスを作らないとリークするか、というとそうではない。 ではどうなっているのか? どうなっているのかを見るためにちょっと実験してみる。 NSAutoreleasePoolにはドキュメントされてないけどデバグに使うと思われるメソッドがある。 + (void)showPools; これはFoundation frameworkのclass-dumpを読んでいて見つけた。こういう隠しメソッドと言うかデバグ痕跡のようなものがときどきある。こういうドキュメントされていないメソッドはOSのバージョンによって動作が違ったり、極端な場合全然違う意味だったりそもそも存在しなかったりするので注意が必要である

  • iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life

    以前iPhoneアプリ開発時のメモリ管理で気をつけることという記事を書いたのですがマルチスレッド時のメモリ管理に関して全く触れてなかったのでまとめてみました。 NSAutoreleasePool はスレッドごとに作成する 処理を別スレッドで実行する場合、スレッドごとに NSAutoreleasePool が必要になります。NSAutoreleasePool の作成を忘れるとメモリリークします。 以下のように main 関数から Sample クラスのインスタンスを生成してメソッドを呼び出している場合、シングルスレッドの場合とマルチスレッドの場合で NSAutoreleasePool の作成タイミングが異なります。 @interface Sample { } - (void)hoge; - (void)foo; - (void)bar; - (void)baz; @end int main(

    iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life
  • 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

  • Blogger

    Google のウェブログ公開ツールを使って、テキスト、写真、動画を共有できます。

  • Mac OSでも楽チン ツイート その2 Social.framework – Scrapple From The Apple

    アプリケーションからとにかく簡単にツイートしたい時は、前出のNSSharingServiceを使うのが最も簡単な方法の用だが、タイムラインを取得したり、よりカスタマイズをしたいという場合は、10.8より追加された、Social.frameworkのSLRequestを使用するのが良さそうだ。このクラスは使い勝手としては、iOS5から搭載されたTwitter.frameworkのTWRequestにそっくりで、こちらも非常に楽チンだ。 では、まずはFrameworksに”Social.framework”とAccounts.frameworkを追加する。次にヘッダをそれぞれインポート<Social/Social.h><Accounts/Accounts.h>。以上で準備完了。 つぎにツイートをするにはこんな感じ。 - (void)applicationDidFinishLaunching:(

    DOISHIGERU
    DOISHIGERU 2013/03/07
    TweetTimeLine
  • 【iOS】意外と知られてない?Apple公式のおもしろサンプルコードを10個ほどまとめ - @kitano_ow 's blog

    AppleAPIやらガイドラインなど開発に必要な資料を公開してくれていますが、 サンプルとなるプロジェクトも公開してくれています。 とりあえず、見つけたものを簡単に。 目次 (リンクにしてません) 1.顔検出SquareCam 2.Tabを使った画面遷移、回転とか諸々入ってる Tabster 3.シンプルFTPクライアント SimpleFTPSample 4バッテリーについての参考に BatteryStatus 5.動画のちょっとした編集できる? AVSimpleEditoriOS 6.画像から位置情報やらその他諸々取得できるPhotosByLocation 7.PDFの拡大縮小 ZoomingPDFViewer 8.画像の反射 Reflection 9.波紋 GLCameraRipple 10.指をスライドさせてViewを移動させれる Move Me 前提その1 公式のリファレンスペー

    【iOS】意外と知られてない?Apple公式のおもしろサンプルコードを10個ほどまとめ - @kitano_ow 's blog
  • 重い処理途中の再起動で落ちない方法 - 西海岸より

  • Working with Assertions to Debug your Apps

    DOISHIGERU
    DOISHIGERU 2013/02/28
    NSAssertionの中身についての説明
  • SenTestを使って非同期のテスト - iRSSの日記

    以下のような感じで、うごいているっぽいのだけど、当にこんなので、よいのか? ↓たぶん、だめみたい。 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];をよぶと、 [mm updateNewsstandIssues];が2重起動されるようにみえる?? だめに見えたのは、バグだった模様です。 なので、以下で大丈夫かも。 @implementation spikeTests - (void)setUp { [super setUp]; // Set-up code here. _isDone = NO; } - (void)tearDown { // Tear-down code here. [super tearDown]; } - (void)testModelManage

    SenTestを使って非同期のテスト - iRSSの日記
  • Cocoaの日々: [iOS] 非同期処理を同期処理に変える

    iOS/iPhone/iPad/MacOSX プログラミング, Objective-C, Cocoaなど 問題 この前リリースしたカスタム UIAlertView は表示メソッドを呼び出した後はそのまま処理が続行される。 Cocoaの日々: [iOS] ユーザ名/パスワードの入力ができるカスタム UIAlertView ライブラリを公開 例えば下記のような場合。 - (IBAction)showAlert:(id)sender { [LKAccountPanel showWithTitle:@"Test" completion:^(BOOL result, NSString* username, NSString* password) { NSLog(@"result: %d\nusername: %@\npassword: %@", result, username, password)

    Cocoaの日々: [iOS] 非同期処理を同期処理に変える
  • iOS下位互換のための動的メソッド追加 - mixi engineer blog

    どうも、佐野です。先日のWWDCでは大々的にiOS6が発表され、AppleのDev Centerからβ版のSDKもダウンロードできるようになっており、開発者の皆さんは新機能の利用に胸を踊らせていることかと思います。mixiのiPhoneアプリはiOS4ユーザも多いため旧環境もサポートしなければならず、一方で新環境のユーザには新機能を提供したいですしコードも UP TO DATE に保っておきたいものです。そこで今回はできるだけ新環境向けのコードに下位互換性を持たせられるように、クラスに対して動的にメソッドを追加する方法をご紹介します。 Objective-Cのメソッドコールは、Cのようにコンパイル時にリンクされるのではなく、アプリケーションの実行時にメソッドが検索されて実行されます。実はObjective-Cのメソッドは単なるC言語の関数ポインタであり、それを呼び出すためのセレクタも単なる

    iOS下位互換のための動的メソッド追加 - mixi engineer blog
    DOISHIGERU
    DOISHIGERU 2013/02/25
    iOSのバージョン差分
  • Parse

    The most amazing feature of Parse Server is that it’s accessible for developers of all skill levels. Personally, I started playing around with Objective-C in 2012. Parse was a way for me to build a complete online app, without having the in-depth knowledge of how to build networking, storage, user systems, etc. The more I built with Parse, the more I learnt JavaScript, which has fortunately allowe

    Parse
    DOISHIGERU
    DOISHIGERU 2013/02/07
    Blocksの理解度のテスト
  • OCLint

    OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems like: Possible bugs - empty if/else/try/catch/finally statements Unused code - unused local variables and parameters Complicated code - high cyclomatic complexity, NPath complexity and high NCSS Redundant code - redundant if statement and use

    DOISHIGERU
    DOISHIGERU 2013/01/18
    静的解析