Enviar búsqueda
Cargar
NSHashTableでDelegatesパターン
•
2 recomendaciones
•
1,601 vistas
Masaki Oshikawa
Seguir
NSHashTableの使い道について考えました。
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 31
Descargar ahora
Descargar para leer sin conexión
Recomendados
20141017 introduce razor
20141017 introduce razor
do_aki
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
ウェブから情報をあつめる
ウェブから情報をあつめる
Shuhei Iitsuka
ストリーム処理エンジン「Zero」の開発と運用
ストリーム処理エンジン「Zero」の開発と運用
Eiichi Sato
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
Tanaka Yuichi
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews, Inc.
Recomendados
20141017 introduce razor
20141017 introduce razor
do_aki
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
ウェブから情報をあつめる
ウェブから情報をあつめる
Shuhei Iitsuka
ストリーム処理エンジン「Zero」の開発と運用
ストリーム処理エンジン「Zero」の開発と運用
Eiichi Sato
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
Tanaka Yuichi
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
佑介 九岡
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews, Inc.
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト
Shinichiro Abe
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Hiroshi Tokumaru
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
Akihiro Kuwano
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
Aerospike v3 install
Aerospike v3 install
Makoto Uehara
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
Introduction to MongoDB
Introduction to MongoDB
moai kids
関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる
Noriaki Sakata
安全なPHPアプリケーションの作り方2013
安全なPHPアプリケーションの作り方2013
Hiroshi Tokumaru
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
JubatusOfficial
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
Más contenido relacionado
La actualidad más candente
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト
Shinichiro Abe
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Hiroshi Tokumaru
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
Akihiro Kuwano
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
Aerospike v3 install
Aerospike v3 install
Makoto Uehara
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
Introduction to MongoDB
Introduction to MongoDB
moai kids
関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる
Noriaki Sakata
安全なPHPアプリケーションの作り方2013
安全なPHPアプリケーションの作り方2013
Hiroshi Tokumaru
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
JubatusOfficial
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
La actualidad más candente
(20)
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Aerospike v3 install
Aerospike v3 install
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Introduction to MongoDB
Introduction to MongoDB
関数プロキシを使って REST APIっぽくを使ってみる
関数プロキシを使って REST APIっぽくを使ってみる
安全なPHPアプリケーションの作り方2013
安全なPHPアプリケーションの作り方2013
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
徳丸本ができるまで
徳丸本ができるまで
Similar a NSHashTableでDelegatesパターン
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
AWS SDK for Smalltalk
AWS SDK for Smalltalk
Sho Yoshida
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
Takashi Aoe
Groovyコンファレンス
Groovyコンファレンス
Shinichiro Takezaki
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Shohei Okada
Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
AzureでLaravel動かしてみた
AzureでLaravel動かしてみた
Keiji Kamebuchi
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
Sho Yoshida
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
Takahiro Tsuchiya
Automation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
softlayerjp
SQLアンチパターンNight
SQLアンチパターンNight
Hironori Miura
Lithium Labo #1
Lithium Labo #1
Yusuke Ando
ServerSideJavaScript
ServerSideJavaScript
Ryunosuke SATO
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法
Kazuho Oku
Similar a NSHashTableでDelegatesパターン
(20)
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
AWS SDK for Smalltalk
AWS SDK for Smalltalk
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
Groovyコンファレンス
Groovyコンファレンス
An Internal of LINQ to Objects
An Internal of LINQ to Objects
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Web制作勉強会 #2
Web制作勉強会 #2
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AzureでLaravel動かしてみた
AzureでLaravel動かしてみた
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
Automation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
SQLアンチパターンNight
SQLアンチパターンNight
Lithium Labo #1
Lithium Labo #1
ServerSideJavaScript
ServerSideJavaScript
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法
Último
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Último
(9)
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
NSHashTableでDelegatesパターン
1.
NSHashTableで Delegatesパターン
2.
自己紹介 @starfruits_j (Little Gleam)
3.
株式会社 Azione 株式会社Azione のiOSアプリ開発、管理職 昨年末にSQLを書くことが嫌いということでNyaruDBと Realmについて発表しました PHPではlaravelがお気に入り
4.
開発実績デコメーラー Nator モバスペブック © 2014 Azione
Co.,Ltd. All Right Reserved.
5.
個人でもアプリ出してますQRコードリーダー FF10 モンスター捕獲数カウンター hackadl WebPage翻訳for Safari
6.
発表内容Swift!? NSHashTable 使い道について
7.
Objective-Cが好きnilをスキップできるところ weak参照(ARC)があるところ メソッド名が長いところ
8.
NSHashTableという存在
9.
使い方NSHashTable * hashTable
= [[NSHashTable alloc] init]; [hashTable addObject:@"test"]; [hashTable addObject:@"obj"]; [hashTable removeObject:@"obj"]; NSLog(@"table: %@", [hashTable allObjects]); NSArrayというよりNSSetを拡張したような感じ ユニークなコレクション
10.
options enum { // default
is strong NSPointerFunctionsStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0), NSPointerFunctionsOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0), NSPointerFunctionsMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0), NSPointerFunctionsMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0), NSPointerFunctionsWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0), NSPointerFunctionsObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8), NSPointerFunctionsOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8), NSPointerFunctionsObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8), NSPointerFunctionsCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8), NSPointerFunctionsStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8), NSPointerFunctionsIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8), NSPointerFunctionsCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16), }; defaultではhashとisEqual:を使って比較
11.
速度比較10,000個のUUIDをaddObject class time NSArray 0.055016 NSSet
0.023589 NSHashTable 0.022918
12.
速度比較ArrayにcontainsObject:を追加 class time NSArray 3.670467 NSSet
0.021289 NSHashTable 0.021819
13.
真意はNSPointerFunctionsWeakMemo ry [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]; [NSHashTable weakObjectsHashTable];
14.
Objectが破棄されると自動で削除NSInteger max =
1000; @autoreleasepool { for (NSInteger i = 0; i < max; i++) { NSString *str = [NSUUID UUID].UUIDString; [ht addObject:str]; NSLog(@"count %ld", ht.allObjects.count); } } NSLog(@"count %ld %@", ht.allObjects.count, ht.allObjects); countは反映されないので、allObjects.countが良いかと
15.
何に使おかUIScrollView.delegate UIWebView.delegate 大人気!でもdelegateは1対1 1対多のパターンが欲しい
16.
NJKScrollProxyパターン? _scrollProxy = [[NJKScrollFullScreen
alloc] initWithForwardTarget:self]; // UIScrollViewDelegate and self.tableView.delegate = (id)_scrollProxy; // cast for surpress incompatible warnings _scrollProxy.delegate = self; delegateは1対1の通知パターンなので仕方ない
17.
1対多と言えばKVO contentOffsetをKVOで監視したり ドラッグのスピード等は独自実装しなければならない KVOはおそらくassignで保持してるので、removeObserver: 忘れるとクラッシュする
18.
そこでDelegatesパターン- (void)addDelegate:(id <NantokaDelegate>)delegate; -
(void)removeDelegate:(id <NantokaDelegate>)delegate; - (void)removeAllDelegates;
19.
addDelegate - NSArray - (void)addDelegate:(id <NantokaDelegate>)delegate
{ if ([self.delegates containsObject:delegate]) { return; } [self.delegates addObject:delegate]; } 同じ通知を複数回投げる必要はないのでcontainsObjectす る
20.
addDelegate - NSHashTable - (void)addDelegate:(id <NantokaDelegate>)delegate
{ [self.delegates addObject:delegate]; } スッキリ!
21.
登録されたdelegatesに通知- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ for (id <UIScrollViewDelegate> delegate in self.delegates) { if ([delegate conformsToProtocol:@protocol(UIScrollViewDelegate)]) { if ([delegate respondsToSelector:@selector(scrollViewDidScroll:)]) { [delegate scrollViewDidScroll:scrollView]; } } } }
22.
DegatesパターンにNSHashTableを使うと幸せになる理由delegatesをNSArrayで管理するとretainされる delegateは基本的にasign < weak参照が良い deallocでdelegate
= nilする場合等、循環参照の問題 assignの時は非同期通信等、通信完了前にdelegateが破棄 された場合にクラッシュ dealloc等でdelegate = nil する必要があった weakなら何も起こらず安心
23.
NSHashTableならweakで管理できるので解放いらない
24.
delegatesパターンってあるの? 聞いたことないです 議論はちらほらあって、権限を移譲できる人が沢山いるの は良くないとか 実はAppleが採用してたりとか?
25.
とりあえずプロジェクト内を 検索してみた
26.
あった! AFURLSessionManager - (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask progress:(NSProgress
* __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHa - (void)removeAllDelegates; delegatesはNSMutableDictionaryでした。
27.
weak参照の通知と言えば Realmの更新通知_token = [[RLMRealm
defaultRealm] addNotificationBlock:^(NSString *notification, RLMRealm *realm) }]; _tokenを解放すると監視外れるので、weak参照でblockを保 持 delegatesではないけど、blockを何かにaddして保持してい る
28.
あった! NSHashTable *_notificationHandlers
29.
こんなケースにも使えそうMemoryManager的な + (instansetype)sharedManager; - (void)addViewController:(UIViewController
*)vc; - (NSArray *)leakedViewControllers; - (NSArray *)leakedViewControllers { NSMutableArray *r = [@[] mutableCopy]; for (UIViewController *vc in self.hashTable.allObjects) { if (??? vc.parentViewController == nil ????) { [r addObject:vc]; } } return r; } Leaks繋がなくてもデバッグできそう!
30.
NSHashTableでDelegates まとめユニークなコレクションを作る場合、速度はNSArrayより 高速、NSSetと同じ NSHashTableを利用したdelegatesパターンならKVOの removeObserver忘れのようなことも気にしないでよい NSHashTableの使いどころ KVO以外の方法で1対多の通知を実現したい場合 非同期処理のOperation管理 リークチェック等にも使えそう
31.
Which http://which.photos Whichというアプリをリリースします larabel, RealmでSQL書かずに実装しました もちろんdelegatesパターン使いました
Descargar ahora