投稿

2月, 2015の投稿を表示しています

UIFontのfontName一覧 iOS8版

参考記事
Over&Out その後 UIFontのfontName一覧

これのiOS8版を行います。
""が付いているものと付いていないものがありますが、どちらも指定できます。
使用例
[UIFont fontWithName:@"Courier" size:512];
family:Marion ( "Marion-Italic", "Marion-Bold", "Marion-Regular" ) family:Copperplate ( "Copperplate-Light", Copperplate, "Copperplate-Bold" ) family:Heiti SC ( "STHeitiSC-Medium", "STHeitiSC-Light" ) family:Iowan Old Style ( "IowanOldStyle-Italic", "IowanOldStyle-Roman", "IowanOldStyle-BoldItalic", "IowanOldStyle-Bold" ) family:Courier New ( "CourierNewPS-BoldMT", "CourierNewPS-ItalicMT", CourierNewPSMT, "CourierNewPS-BoldItalicMT" ) family:Apple SD Gothic Neo ( "AppleSDGothicNeo-Bold", "AppleSDGothicNeo-Thin", "AppleSDGothicNeo-UltraLight", "AppleSDGothicNeo-Regular", &…

bridge系のキャスト

よく忘れてしまうので…


何がカウンタ方式か
ARC obj-cでも非ARC obj-cでもCF系(CoreFoundation系)でも全部カウンタ方式。プログラマが管理文を書くか書かない(コンパイラが書く?)かの違いはある。


カウンタはどこで持つか
2つの変数が同じインスタンスを参照している時カウンタはいくつか?
1つ。


__bridge系って何?
id系とCF系のキャストの箇所でコンパイラがretainとreleaseをどう書くかを指定するもの。
__bridge
__bridge_retained
__bridge_transfer
の3つ。
何をどう使ってもretainとreleaseがきちんと数を合わせて実行されてれば間違いではないと思いますが、3種類あるのは、人が見てわかりやすいとか、下で書くような管理責任をどうしたいのかを表すのには便利かと思います。


オーナーシップについて
オーナーシップという言葉で説明してあるものがかなりあります。もしよくわからない場合は、一旦retain releaseの追加という観点で理解してから、再度オーナーシップについて考えるのがおすすめです。


それぞれのパターンでキャストして代入するとこうなります。

__bridgeによるCF系からid系
id系 = (__bridge id系)CF系
id系がARC管理下に入ることによりカウンタ+1。ただし__weakであれば増加処理はなし。
キャスト後もCF系で管理したいときにおすすめ。id系が消えたあともCF系を使いたい時など。

__bridgeによるid系からCF系
CF系 = (__bridge CF系)id系
カウンタ変わらず
引き続きid系による(自動)管理をしたいときにおすすめ。キャスト後のCF系は管理しないことが前程だが一応管理命令は実行出来る。

__bridge_retainedによるid系からCF系
CF系 = (__bridge_retained CF系)id系
CF系がretainされるので+1
キャスト後のCF系で管理したいときにおすすめ。
id系は引き続き管理されている。

__bridge_transferによるCF系からid系
id系 = (__bridge_transfer id系)CF系
CF系がreleaseされることにより-1。キャスト後のCF系は管…

Interface「新時代コンパイラ入門」はよかった

Interface2015年3月号は「高性能でフリー!新時代コンパイラ入門」特集。
Swiftのコンパイルエラーの記事を書いたこともあって買ってみました。
変なハショリなどもなく読みやすかったです。
話に出てくるコンパイラはいさぎよくGCCとLLVMに絞ってあります。
コンパイルの各工程の解説が書かれています。

対象読者は普段プログラムをされている方か昔されていた方。そうでない方だと意味のわからないアルファベットが大量に出てくる状態になってつらいかもしれません。

対象とする前程知識はかなり基本的なコンパイラの知識で十分です。
・コンパイルとはプログラムを解釈してCPUへの命令に置き換える作業
・ARMとはCPUの設計をする会社
・ARMが作ったものにはv7やv8などがある
程度でOKでした。

自分が読んだ部分はSwiftでの開発に関係ありそうなところだけで
イントロダクション
Appendix 1
第1章〜第6章
でした。

Clangの機能の使い方についての説明があった。これはブログで記事を書くのに役に立ちそう。