Submit Search
Upload
Cocoa勉強会#43-Blocksを使う
•
0 likes
•
693 views
Masayuki Nii
Follow
Cocoa勉強会#43 2010/11/27 Blocksを使う 新居雅行
Read less
Read more
Technology
Report
Share
Report
Share
1 of 14
Download now
Download to read offline
Recommended
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
Yoichiro Sakurai
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Linqことはじめ
Linqことはじめ
Shoichi Yasui
Material
Material
_TUNE_
Nds meetup8 lt
Nds meetup8 lt
ushiboy
たのしい関数型
たのしい関数型
Shinichi Kozake
たのしい高階関数
たのしい高階関数
Shinichi Kozake
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
Recommended
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
Yoichiro Sakurai
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Linqことはじめ
Linqことはじめ
Shoichi Yasui
Material
Material
_TUNE_
Nds meetup8 lt
Nds meetup8 lt
ushiboy
たのしい関数型
たのしい関数型
Shinichi Kozake
たのしい高階関数
たのしい高階関数
Shinichi Kozake
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
TaPL_chap11
TaPL_chap11
a-hisame
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
Appresso Engineering Team
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
Kenta Hattori
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
y1r96 Ueno
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
JPCERT Coordination Center
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
Masahiro Sakai
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
Inference and Checking of Object Ownership
Inference and Checking of Object Ownership
Jiachen Yang
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
Altech Takeno
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
kamukiriri
Linq To Fun
Linq To Fun
deflis
基礎構文班19回目 変数のスコープとforの並び替え
基礎構文班19回目 変数のスコープとforの並び替え
XMLProJ2014
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
Giran Sieges - Applescript com @leohackin
Giran Sieges - Applescript com @leohackin
Leonardo "Hackin" Freire
Applescript
Applescript
MD5500
More Related Content
What's hot
TaPL_chap11
TaPL_chap11
a-hisame
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
Appresso Engineering Team
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
Kenta Hattori
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
y1r96 Ueno
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
JPCERT Coordination Center
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
Masahiro Sakai
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
Inference and Checking of Object Ownership
Inference and Checking of Object Ownership
Jiachen Yang
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
Altech Takeno
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
kamukiriri
Linq To Fun
Linq To Fun
deflis
基礎構文班19回目 変数のスコープとforの並び替え
基礎構文班19回目 変数のスコープとforの並び替え
XMLProJ2014
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
What's hot
(20)
TaPL_chap11
TaPL_chap11
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
はてなブックマーク in Scala
はてなブックマーク in Scala
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
Inference and Checking of Object Ownership
Inference and Checking of Object Ownership
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
Linq To Fun
Linq To Fun
基礎構文班19回目 変数のスコープとforの並び替え
基礎構文班19回目 変数のスコープとforの並び替え
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Viewers also liked
Giran Sieges - Applescript com @leohackin
Giran Sieges - Applescript com @leohackin
Leonardo "Hackin" Freire
Applescript
Applescript
MD5500
JavaScript で OS X を自動操作
JavaScript で OS X を自動操作
Tomokazu Kiyohara
Scripting OS X with Applescript, without Applescript
Scripting OS X with Applescript, without Applescript
Matt Patterson
Xcode以外の開発環境 AppCodeの紹介
Xcode以外の開発環境 AppCodeの紹介
Akira Hayashi
タスクを喰らうど!
タスクを喰らうど!
Daisuke Miura
Text to-speech
Text to-speech
幸雄 村上
Ning presentation
Ning presentation
Stratepedia Presentations
Quick Application Development with Web Frameworks
Quick Application Development with Web Frameworks
Stratepedia Presentations
私の営業の失敗談
私の営業の失敗談
幸雄 村上
Viewers also liked
(10)
Giran Sieges - Applescript com @leohackin
Giran Sieges - Applescript com @leohackin
Applescript
Applescript
JavaScript で OS X を自動操作
JavaScript で OS X を自動操作
Scripting OS X with Applescript, without Applescript
Scripting OS X with Applescript, without Applescript
Xcode以外の開発環境 AppCodeの紹介
Xcode以外の開発環境 AppCodeの紹介
タスクを喰らうど!
タスクを喰らうど!
Text to-speech
Text to-speech
Ning presentation
Ning presentation
Quick Application Development with Web Frameworks
Quick Application Development with Web Frameworks
私の営業の失敗談
私の営業の失敗談
Similar to Cocoa勉強会#43-Blocksを使う
Spockの基礎
Spockの基礎
Kiyotaka Oku
JavaScript入門
JavaScript入門
Ryo Maruyama
探検!SwiftyJSON
探検!SwiftyJSON
Yuka Ezura
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Proof summit2014mizar
Proof summit2014mizar
Alcor80UMa
LINQ の概要とかもろもろ
LINQ の概要とかもろもろ
ShinichiAoyagi
textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
umidori
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
Tomohiro Kumagai
Similar to Cocoa勉強会#43-Blocksを使う
(11)
Spockの基礎
Spockの基礎
JavaScript入門
JavaScript入門
探検!SwiftyJSON
探検!SwiftyJSON
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
Proof summit2014mizar
Proof summit2014mizar
LINQ の概要とかもろもろ
LINQ の概要とかもろもろ
textsearch_jaで全文検索
textsearch_jaで全文検索
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Clojure programming-chapter-2
Clojure programming-chapter-2
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
More from Masayuki Nii
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Masayuki Nii
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediator
Masayuki Nii
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Masayuki Nii
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Masayuki Nii
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Masayuki Nii
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
Masayuki Nii
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
Masayuki Nii
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Masayuki Nii
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
Masayuki Nii
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Masayuki Nii
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Masayuki Nii
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Masayuki Nii
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
Masayuki Nii
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Masayuki Nii
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
Masayuki Nii
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Masayuki Nii
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
Masayuki Nii
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Masayuki Nii
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Masayuki Nii
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Masayuki Nii
More from Masayuki Nii
(20)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediator
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Recently uploaded
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Recently uploaded
(8)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
Cocoa勉強会#43-Blocksを使う
1.
Blocksを使う Masayuki Nii -
nii@msyk Cocoa Study #43 Nov 27, 2010 2010年11月26日金曜日
2.
Agenda Blocksとは いろいろな場合の書き方 マクロと型定義でより見やすく 2010年11月26日金曜日
3.
Blocks iOS 4/Snow Leopardよりサポート プログラム自体をデータとして扱う プログラム自体を変数に代入 定義した場所と別の場所で実行 • • 他の言語では「クロージャ」 iOS/Mac
OS Xではこの言い方はしていない • 2010年11月26日金曜日
4.
もっともシンプルな例 ! void (^proc1)(void)
= ^(void){ NSLog( @"==proc1=="); }; ! proc1; ! proc1(); proc1は変数、よって「void (^)(void)」は型 ^がともかく「関数」ないしは「その始まり」 戻り値は^の左(この場合はvoid) 引数は^の右(この場合はなし) • • • proc1だけではエラーは出ないが実行もされない 参照するだけで呼び出されない • proc1()によって、{ ... }の部分を実行する 2010年11月26日金曜日
5.
引数がある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日金曜日
6.
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日金曜日
7.
引数に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日金曜日
8.
引数に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日金曜日
9.
関数定義と長過ぎる引数 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日金曜日
10.
マクロ定義で見やすくする #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日金曜日
11.
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日金曜日
12.
クラス定義で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日金曜日
13.
マルチタスク NSThreadでマルチタスク 引数で渡したBlocksの実行がなんかおかしい とりあえずはあきらめたが… • • NSInvocationOperation/NSBlockOperationがある NSOperationの派生クラスなので、単純に言えば NSThreadの「今風」な使い方が可能 Blocksで渡したプログラムを、別スレッドで実行で きた • • 2010年11月26日金曜日
14.
考察 APIにBlocksを使うものが出てきている iOSのバックグランドタスクはこれしかない 避けて通れない • • JavaScriptほどの柔軟性はない 文字列変数からBlocks生成はできない • 文法がなんか腑に落ちるような落ちないような パターンで学習するしかないかな∼ • 2010年11月26日金曜日
Download now