狠狠撸

狠狠撸Share a Scribd company logo
Blocksを使う
Masayuki Nii - nii@msyk
Cocoa Study #43
Nov 27, 2010

2010年11月26日金曜日
Agenda

Blocksとは
いろいろな場合の書き方
マクロと型定義でより見やすく

2010年11月26日金曜日
Blocks

iOS 4/Snow Leopardよりサポート
プログラム自体をデータとして扱う
プログラム自体を変数に代入
定義した場所と別の場所で実行

?
?

他の言語では「クロージャ」
iOS/Mac OS Xではこの言い方はしていない

?

2010年11月26日金曜日
もっともシンプルな例
! void (^proc1)(void) = ^(void){ NSLog( @"==proc1=="); };
! proc1;
! proc1();

proc1は変数、よって「void (^)(void)」は型
^がともかく「関数」ないしは「その始まり」
戻り値は^の左(この場合はvoid)
引数は^の右(この場合はなし)

?
?
?

proc1だけではエラーは出ないが実行もされない
参照するだけで呼び出されない

?

proc1()によって、{ ... }の部分を実行する
2010年11月26日金曜日
引数があるBlocksの例
! int (^proc2)(id, int) = ^(id str, int c){
! ! for( int i=0 ; i < c; i++ )!
{
! ! ! NSLog( @"%@",str );
! ! }
! ! return 99;
! };
//!
proc2(); --> error: too few arguments to block 'proc2'
! int x = proc2( @"Song", 3 );
! NSLog( @"x=%d", x ); //! xの値は99

変数はproc2、型的なものは int(^)(id, int)
=より後は本体、最初に仮引数を定義
本体の定義には引数は不要

?
?

2010年11月26日金曜日
Block内外での変数と変更可能性
!
!
!
!

__block int b = 100;
int c = 200;
void (^proc3)(void) = ^(void){ b=b+c; };
proc3();! NSLog( @"b=%d", b );! // bの値は300

! proc3();! NSLog( @"b=%d", b );! // bの値は500

//!
void (^proc3)(void) = ^(void){ b++; c++; };
--> error: increment of read-only variable 'c'

__block宣言した変数はBlocks内で書き込める
そうじゃないものは書き込みができない

?

2010年11月26日金曜日
引数にBlocksをもつ関数を定義する
void function1( int a, void (^b)(id,int))! {
! b(@"pack",a);
}
:
! function1( 3, ^(id x,int y) { NSLog(@"%@,%d",x,y); } );
!
! void(^f1)(id,int) = ^(id x, int y){ NSLog(@"%@,%d",x,y); };
! function1( 3, f1 );

スケルトン
Blocksの引数の返り値はvoid
引数は「変数定義」と同じ形式

?
?

関数の利用時
最初に紹介した基本型の右側と同じ

?

2010年11月26日金曜日
引数にBlocksを持つ関数(戻り値あり)
int function2( int a, int (^b)(id,int))!{
! int i=b(@"pack",a);
! return i;
エラーに
}
:
なる場合
function2( 3, ^(id x,int y) { return 4; } );
!
function2( 3, ^(id x,int y) { } );
//-->error: incompatible block pointer types initializing 'void
(^)(struct objc_object *, int)', expected 'int (^)(struct
objc_object *, int)'
function2( 3, int ^(id x,int y) { return 4; } );
//-->expected expression before 'int'
function2( 3, (int)^(id x,int y) { return 4; } );
//-->invalid conversion initializing integer 'int', expected
block pointer
function2( 3, int(^)(id x,int y) { return 4; } );
//-->expected expression before 'int'
function2( 3, (int)(^)(id x,int y) { return 4; } );
//-->expected specifier-qualifier-list before ')' token
2010年11月26日金曜日
関数定義と長過ぎる引数
void samplefunc( int,
void (^)(NSString*, NSString*, NSArray*, NSMutableArray*,
NSMutableDictionary*, int, int));
void samplefunc( int x,
void (^func)(NSString* z1, NSString* z2, NSArray* z3,
NSMutableArray* z4, NSMutableDictionary* z5, int s1, int s2))
{ func(....);[z1 release]; }
:
samplefunc( 3,
^(NSString* z1, NSString* z2, NSArray* z3, NSMutableArray* z4,
NSMutableDictionary* z5, int s1, int s2){
[z1 release];
});

分け分からん…

2010年11月26日金曜日
マクロ定義で見やすくする
#define LONGPARAM (NSString* z1, NSString* z2, NSArray* z3, 
! NSMutableArray* z4, NSMutableDictionary* z5, int s1, int s2)
void samplefunc2( int, void (^)LONGPARAM);
void samplefunc2( int x, void (^func)LONGPARAM)
{}
:
samplefunc2( 3, ^LONGPARAM{
! NSLog( @"%@",z2 );
});

引数の並びを仮引数込みでマクロ定義する
それを利用して、スケルトン、インプリメンテー
ション、利用時、それぞれで利用する
スケルトンでは仮引数は無視されるので、指定して
あっても問題ない

?
?

2010年11月26日金曜日
Blocksの型定義
#define PARAM (id x,int y)
typedef void (^func1param)PARAM;
typedef int (^func2param)PARAM;
:
func2param f2p;
f2p = ^PARAM{
! NSLog(@"%@,%d",x,y);
! return 6;
};
function2( 3, f2p );

引数並び、Blocksの型を定義してしまう
引数並びをマクロで定義
戻り値を加えて型の定義

?
?

プログラム本体はちょっと整理した雰囲気になる
2010年11月26日金曜日
クラス定義でBlocks
#define BLOCKPARAM (id x, int y, NSString *s)
typedef float(^MyBlock)BLOCKPARAM;
@interface TestClass : NSObject
{
! MyBlock f;
}
- (void) myMethod: (MyBlock)bf;
@end
@implementation TestClass
- (void) myMethod: (MyBlock)bf! {! }
@end

引数並びのマクロ定義と型の定義を行えば、クラスの
定義もすっきり
2010年11月26日金曜日
マルチタスク

NSThreadでマルチタスク
引数で渡したBlocksの実行がなんかおかしい
とりあえずはあきらめたが…

?
?

NSInvocationOperation/NSBlockOperationがある
NSOperationの派生クラスなので、単純に言えば
NSThreadの「今風」な使い方が可能
Blocksで渡したプログラムを、別スレッドで実行で
きた

?
?

2010年11月26日金曜日
考察

APIにBlocksを使うものが出てきている
iOSのバックグランドタスクはこれしかない
避けて通れない

?
?

JavaScriptほどの柔軟性はない
文字列変数からBlocks生成はできない

?

文法がなんか腑に落ちるような落ちないような
パターンで学習するしかないかな~

?

2010年11月26日金曜日

More Related Content

What's hot (20)

KEY
TaPL_chap11
a-hisame
?
PDF
JavaScript 勉強会 ― 変数?演算子?文
Appresso Engineering Team
?
ODP
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
?
PPT
アルゴリズムとデータ构造2
Kenta Hattori
?
PDF
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
?
PDF
Knct-SG #1 Parser入門
y1r96 Ueno
?
PDF
はてなブックマーク in Scala
Lintaro Ina
?
PDF
闯补惫补セキュアコーディングセミナー东京第3回演习
JPCERT Coordination Center
?
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
?
PDF
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
Masahiro Sakai
?
PDF
60分て?体験する Stream / Lambda? ハンズオン
Hiroto Yamakawa
?
PPTX
纯粋関数型アルゴリズム入门
Kimikazu Kato
?
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
?
PDF
Inference and Checking of Object Ownership
Jiachen Yang
?
PPTX
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
?
PPTX
搁耻产测と闯补惫补厂肠谤颈辫迟に见る第一级関数
Altech Takeno
?
PDF
VS勉強会 .NET Framework 入門
kamukiriri
?
PDF
Linq To Fun
deflis
?
PPTX
基礎構文班19回目 変数のスコーフ?とforの並ひ?替え
XMLProJ2014
?
PDF
実行トレース间のデータの差异に基づくデータフロー解析手法の提案
Kamiya Toshihiro
?
TaPL_chap11
a-hisame
?
JavaScript 勉強会 ― 変数?演算子?文
Appresso Engineering Team
?
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
?
アルゴリズムとデータ构造2
Kenta Hattori
?
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
?
Knct-SG #1 Parser入門
y1r96 Ueno
?
はてなブックマーク in Scala
Lintaro Ina
?
闯补惫补セキュアコーディングセミナー东京第3回演习
JPCERT Coordination Center
?
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
?
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
Masahiro Sakai
?
60分て?体験する Stream / Lambda? ハンズオン
Hiroto Yamakawa
?
纯粋関数型アルゴリズム入门
Kimikazu Kato
?
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
?
Inference and Checking of Object Ownership
Jiachen Yang
?
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
?
搁耻产测と闯补惫补厂肠谤颈辫迟に见る第一级関数
Altech Takeno
?
VS勉強会 .NET Framework 入門
kamukiriri
?
Linq To Fun
deflis
?
基礎構文班19回目 変数のスコーフ?とforの並ひ?替え
XMLProJ2014
?
実行トレース间のデータの差异に基づくデータフロー解析手法の提案
Kamiya Toshihiro
?

Viewers also liked (10)

KEY
Giran Sieges - Applescript com @leohackin
Leonardo "Hackin" Freire
?
PDF
Applescript
MD5500
?
PDF
JavaScript で OS X を自動操作
Tomokazu Kiyohara
?
PDF
Scripting OS X with Applescript, without Applescript
Matt Patterson
?
PDF
Xcode以外の開発環境 AppCodeの紹介
Akira Hayashi
?
KEY
タスクを喰らうど!
Daisuke Miura
?
PPTX
Text to-speech
幸雄 村上
?
KEY
Ning presentation
Stratepedia Presentations
?
PDF
Quick Application Development with Web Frameworks
Stratepedia Presentations
?
PPTX
私の営业の失败谈
幸雄 村上
?
Giran Sieges - Applescript com @leohackin
Leonardo "Hackin" Freire
?
Applescript
MD5500
?
JavaScript で OS X を自動操作
Tomokazu Kiyohara
?
Scripting OS X with Applescript, without Applescript
Matt Patterson
?
Xcode以外の開発環境 AppCodeの紹介
Akira Hayashi
?
タスクを喰らうど!
Daisuke Miura
?
Text to-speech
幸雄 村上
?
Ning presentation
Stratepedia Presentations
?
Quick Application Development with Web Frameworks
Stratepedia Presentations
?
私の営业の失败谈
幸雄 村上
?
Ad

Similar to 颁辞肠辞补勉强会#43-叠濒辞肠办蝉を使う (20)

KEY
Objc lambda
matuura_core
?
PDF
Objectie-C de ラムダ
Akihiko Matuura
?
PDF
iPhone, iPad アプリ開発勉強会#3
Hiroe Orz
?
KEY
1.29.user,user,user
Tonny Xu
?
PDF
第3回yidev coding guideline読み
Tomohiko Okita
?
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
?
PDF
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
Ken Morishita
?
PDF
Processing
Akifumi Nambu
?
PDF
颁辞肠辞补勉强会#56-小ネタ集あなたの常识はすでに通用しない
Masayuki Nii
?
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
聡 中川
?
KEY
叠濒辞肠办蝉の活用法
Hidetoshi Mori
?
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ?配列と構造体?
和弘 井之上
?
PDF
ソフトウェア工学2023 12 コート?フォーマット
Toru Tamaki
?
PDF
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
?
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ?コーディング Session 1: openFrameworks入門
Atsushi Tadokoro
?
PDF
颁言语の宣言読み方讲座
tetra_cat
?
PDF
Cocoa Pro5
hasegawa
?
PPTX
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
?
PDF
メディア?アート II 第1回: ガイダンス openFrameworks入門
Atsushi Tadokoro
?
Objc lambda
matuura_core
?
Objectie-C de ラムダ
Akihiko Matuura
?
iPhone, iPad アプリ開発勉強会#3
Hiroe Orz
?
1.29.user,user,user
Tonny Xu
?
第3回yidev coding guideline読み
Tomohiko Okita
?
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
?
滨翱厂/础苍诲谤辞颈诲アフ?リの3つの大事な设计方针
Ken Morishita
?
Processing
Akifumi Nambu
?
颁辞肠辞补勉强会#56-小ネタ集あなたの常识はすでに通用しない
Masayuki Nii
?
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
聡 中川
?
叠濒辞肠办蝉の活用法
Hidetoshi Mori
?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ?配列と構造体?
和弘 井之上
?
ソフトウェア工学2023 12 コート?フォーマット
Toru Tamaki
?
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
?
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ?コーディング Session 1: openFrameworks入門
Atsushi Tadokoro
?
颁言语の宣言読み方讲座
tetra_cat
?
Cocoa Pro5
hasegawa
?
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
?
メディア?アート II 第1回: ガイダンス openFrameworks入門
Atsushi Tadokoro
?
Ad

More from Masayuki Nii (20)

PDF
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Masayuki Nii
?
PDF
トッフ?エスイー勉强会2014第1回-滨狈罢贰搁-惭别诲颈补迟辞谤
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#62-新しい通信クラス群狈厂鲍搁尝厂别蝉蝉颈辞苍を使ってみる
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#34-颈笔丑辞苍别でタブバーを非表示に无理矢理する方法
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#61-メインスレッド外で狈厂鲍搁尝颁辞苍苍别肠迟颈辞苍
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#23-カスタムシートと惭辞诲补濒颈迟测
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#6-厂蚕尝颈迟别を颁辞肠辞补で使う
Masayuki Nii
?
PDF
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#57-叠补蝉别によるローカライズまとめ
Masayuki Nii
?
PDF
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Masayuki Nii
?
PDF
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#28-翱辫别苍厂厂尝で暗号化したファイルを復号する
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#27-蚕耻颈肠办尝辞辞办プラグインの作り方
Masayuki Nii
?
PDF
颁辞肠辞补勉强会23-识别情报の変换?文字エンコードとデータタイプ
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#37-シェイクイベントの実装
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#32-表形式のデータに顺序を记録する方法
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#35-颈笔丑辞苍别でのコピペとカスタム鲍滨
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#47-狈厂鲍搁尝颁辞苍苍别肠迟颈辞苍のデリゲートメソッドと认証
Masayuki Nii
?
PDF
颁辞肠辞补勉强会#38-鲍滨罢补产濒别痴颈别飞テーブル内のナビゲーション
Masayuki Nii
?
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Masayuki Nii
?
トッフ?エスイー勉强会2014第1回-滨狈罢贰搁-惭别诲颈补迟辞谤
Masayuki Nii
?
颁辞肠辞补勉强会#62-新しい通信クラス群狈厂鲍搁尝厂别蝉蝉颈辞苍を使ってみる
Masayuki Nii
?
颁辞肠辞补勉强会#34-颈笔丑辞苍别でタブバーを非表示に无理矢理する方法
Masayuki Nii
?
颁辞肠辞补勉强会#61-メインスレッド外で狈厂鲍搁尝颁辞苍苍别肠迟颈辞苍
Masayuki Nii
?
颁辞肠辞补勉强会#23-カスタムシートと惭辞诲补濒颈迟测
Masayuki Nii
?
颁辞肠辞补勉强会#6-厂蚕尝颈迟别を颁辞肠辞补で使う
Masayuki Nii
?
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Masayuki Nii
?
颁辞肠辞补勉强会#57-叠补蝉别によるローカライズまとめ
Masayuki Nii
?
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Masayuki Nii
?
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Masayuki Nii
?
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
颁辞肠辞补勉强会#28-翱辫别苍厂厂尝で暗号化したファイルを復号する
Masayuki Nii
?
颁辞肠辞补勉强会#27-蚕耻颈肠办尝辞辞办プラグインの作り方
Masayuki Nii
?
颁辞肠辞补勉强会23-识别情报の変换?文字エンコードとデータタイプ
Masayuki Nii
?
颁辞肠辞补勉强会#37-シェイクイベントの実装
Masayuki Nii
?
颁辞肠辞补勉强会#32-表形式のデータに顺序を记録する方法
Masayuki Nii
?
颁辞肠辞补勉强会#35-颈笔丑辞苍别でのコピペとカスタム鲍滨
Masayuki Nii
?
颁辞肠辞补勉强会#47-狈厂鲍搁尝颁辞苍苍别肠迟颈辞苍のデリゲートメソッドと认証
Masayuki Nii
?
颁辞肠辞补勉强会#38-鲍滨罢补产濒别痴颈别飞テーブル内のナビゲーション
Masayuki Nii
?

Recently uploaded (9)

PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
PPTX
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PPTX
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PPTX
色について.pptx .
iPride Co., Ltd.
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
色について.pptx .
iPride Co., Ltd.
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?

颁辞肠辞补勉强会#43-叠濒辞肠办蝉を使う