SlideShare a Scribd company logo
1 of 12
Download to read offline
ちょっとだけ
Toll - free bridge
2014/05/24 Boost.勉強会 #15 札幌 LT
わたなべ
@Susan_jacko
自己紹介
Twitter @Susan_jacko
お仕事 アプリエンジニア…(?)
ほっとさんからのプレッシャー
マイブーム → スープカレー
Toll - free bridge
相互変換 Objective-C ←→ C/C++
正しくは Foundation ←→ Core Foundation
こんなん出来ます!
キャストするだけ
実はどちらもC構造体
CFStringRef cfStr = CFSTR("boost");
NSString *nsStr = (NSString*)cfStr;
NSLog(@"%@", nsStr);
やっぱり今は出来ません
Automatic Reference Counting
Objective-Cは面倒みてくれる
CFStringRef cfStr = CFSTR("boost");
NSString *nsStr = (NSString*)cfStr;
NSLog(@"%@", nsStr);
__bridge 修飾子
Foundation ←→ Core Foundation

どっち方向もOK
参照カウント ±0
CFStringRef cfStr;
NSString *nsStr = (__bridge NSString*)cfStr;
cfStr = (__bridge CFStringRef)nsStr;
NSLog(@"%@", nsStr);
__bridge_retained 修飾子
Foundation → Core Foundation
参照カウント +1
NSString *nsStr;
CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr;
CFShow(cfStr);
__bridge_transfer 修飾子
Core Foundation → Foundation
参照カウント -1
CFStringRef cfStr;
NSString *nsStr = (__bridge_transfer NSString*)cfStr;
NSLog(@"%@", nsStr);
こんな使い方
NSString* tfbSample(NSString *nsStr)
{
CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr;
/*
かくかくしかじか
*/
return (__bridge_transfer NSString*)cfStr;
}
これはリークしてる
CFStringRef tfbSample(NSString *nsStr)
{
CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr;
/*
かくかくしかじか
*/
return cfStr;
}
これでもOK
CFStringRef tfbSample(NSString *nsStr)
{
CFStringRef cfStr = (__bridge_retained CFStringRef)nsStr;
/*
かくかくしかじか
*/
__autoreleasing NSString *nsStr2 =
(__bridge_transfer NSString*)cfStr;
return (__bridge CFStringRef)nsStr2;
}
まとめ
ARC環境では __bridgeを付ける
__bridge_retainedした後は__bridge_transfer
設計次第では__autoreleasingも思い出して!

More Related Content

What's hot

RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
takesako
 
ロケタッチの裏側
ロケタッチの裏側ロケタッチの裏側
ロケタッチの裏側
livedoor
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
Toru Matsuoka
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
AimingStudy
 
20151118卒研進捗LT
20151118卒研進捗LT20151118卒研進捗LT
20151118卒研進捗LT
mohemohe
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
 

What's hot (20)

RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
前期講座09
前期講座09前期講座09
前期講座09
 
こわくないScala vol.2
こわくないScala vol.2こわくないScala vol.2
こわくないScala vol.2
 
RでGIS
RでGISRでGIS
RでGIS
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706
 
ロケタッチの裏側
ロケタッチの裏側ロケタッチの裏側
ロケタッチの裏側
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
 
レイマーチ入門勉強会資料
レイマーチ入門勉強会資料レイマーチ入門勉強会資料
レイマーチ入門勉強会資料
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
 
実践QBVH
実践QBVH実践QBVH
実践QBVH
 
timeVaringMappedFixedValueについて
timeVaringMappedFixedValueについてtimeVaringMappedFixedValueについて
timeVaringMappedFixedValueについて
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
kagamicomput201704
kagamicomput201704kagamicomput201704
kagamicomput201704
 
20151118卒研進捗LT
20151118卒研進捗LT20151118卒研進捗LT
20151118卒研進捗LT
 
P5utda day3
P5utda day3P5utda day3
P5utda day3
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
Slide dist
Slide distSlide dist
Slide dist
 
[(F#における)Modus Ponens と Cut]
[(F#における)Modus Ponens と Cut][(F#における)Modus Ponens と Cut]
[(F#における)Modus Ponens と Cut]
 
仮想記憶の構築法
仮想記憶の構築法仮想記憶の構築法
仮想記憶の構築法
 

Toll - free bridge