SlideShare a Scribd company logo
objective-c

propertyの属性について
@jazzsasori
ツッコミ歓迎
株式会社REVENTIVE CTO

植本 裕紀 と申します。
@jazzsasori

↓

Github

Facebook

Linkedin

Twitter
注)ARCが前提です
まずpropertyの宣言
【文法】

@property (オプション) 型 プロパティ名;



NSStringの場合、こんな感じ

@property (nonatomic, weak) NSString *string;
いや、そもそも
@propertyって何じゃい。



ってか@って何じゃい。
objective-c で @ がつくものは

コンパイラディレクティブ。



コンパイラディレクティブ?

↓

コンパイラへ特定の命令を前処理す
るように指示するもの。
@propertyを宣言すると何が
嬉しい?
@property (nonatomic, weak) NSString *string;


○ ゲッタ/セッタ/メンバ変数が作られます。

- (void)setString:(NSString *)string;

- (NSString *)getString;

メンバ変数 _string
propertyを.hで宣言する
ViewController.h:

@interface ViewController : UIViewController

@property (nonatomic, weak) NSString *string;

@end
○ 宣言するとアクセサとメンバ変数が作られ該当ク
ラスのインスタンス変数からアクセスできます。
propertyを.mで宣言する
ViewController.m:

@interface ViewController ()

@property (nonatomic, weak) NSString *string;

@property (nonatomic, weak) IBOutlet UIView *customView;

@end



@implementation ViewController

∼

@end

○ 宣言するとアクセサとメンバ変数が作られるのは.hと同様ですが、
ViewControllerをインスタンス化して扱う場合にこのpropertyにはアク
セスできません。NSStringの例よりは、IBOutletなど、そのクラス内で
しかアクセスする必要のないpropertyを宣言して使うケースが多いです。
今日のお話
@property (オプション) 型 プロパティ名;



↑



オプションのお話をします。
propertyのオプションはこんなにあるぞ
種類
メソッド名指定
読み書き属性

値の設定方法

アトミック性

オプション
getter=ゲッタ名

setter=セッタ名
readonly
readwrite
assign
retain
unsafe_unretained
strong
weak
copy
nonatomic

説明
ゲッタ/セッタメソッドの名前
を明示的に指定
読み取りのみ
読み書き(デフォルト)
代入によって値を設定(デフォルト)

オブジェクトを保持して設定
assignと同じ(ARC用)
retainと同じ(ARC用)
弱い参照(ARC用)
オブジェクトをコピーして設定
排他実行されない
?
説明しよう!
getter, setter
@property (setter=setValue:) int count;



setterを明示しない場合、setCount: が宣言されます。
self.count = 1; とした場合、setValueが呼び出され
ます。
readonly
@property (readonly) int count;



setterが宣言されません。さらにこのままだと自分自身も書き換えできません。

以下のようにして下さい。



// .h
@interface Hoge
@property (nonatomic, readonly) id value;
@end

!
// .m
@interface Hoge ()
@property (nonatomic, readwrite) id value;
@end



※ readwriteは省略可能
weak
@property (weak) id obj;



参照先のオブジェクトが破棄されたら自動でnilが代入
される(ゼロ化 zeroing)。__weak修飾子を持った
変数と同様のふるまい。オーナーシップを持たないの
で知らないうちに開放されてしまう。



IBOutlet、delegate を扱う変数はコレがオヌヌメ。
__unsafe_unretained, assign
@property (__unsafe_unretained) id obj;

@property (assign) id obj;



ゼロ化 をしないweak変数。オーナーシップを持たな
い。不要になった時点で自前で解放する。

※ iOS 4 との互換性のためのオプションなので覚え
る必要無いと思います。
strong
@property (strong) id obj;



オーナーシップを持つ強い参照。保持の循環(retain
cycle)が発生しやすいので注意。勝手に解放される
と困るオブジェクトに使う。不要になった時点で
deallocで自前解放する。
copy
@property (copy) id obj;



オブジェクトのコピーを保持する。strongと同様、
オーナーシップを持つ強い参照。不要になった時点で
deallocで自前解放する。

nonatomic
@property (nonatomic) id obj;



atomicとはマルチスレッドで動作した時、排他的な動作を
して、他のスレッドの干渉を受けないことを保証する事。
デフォルトはatomic。

atomicである必要がなければ必ずnonatomicを指定するこ
と。atomicにした場合、排他処理のためパフォーマンスが
下がります。



http://d.hatena.ne.jp/masakih/20120325/1332658392
では、まとめ
まとめ
•

必然性が無い限りnonatomic指定。

•

strong 指定したらその足でdeallocで解放しに
行こう。

•

IBOutlet は weak

•

delegate も weak
ご清聴ありがとうございました。

More Related Content

PDF
F#+Erlangで簡単なシューティングゲームを作ってみている
PDF
I phoneアプリ入門 第5回
PDF
(きっと)あなたにも出来る!Hyperledger composer でブロックチェーンアプリを動かしてみた
PDF
BMXUG つきじ#4
PDF
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
PDF
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
PPT
Impractical Introduction of Boost Spirit Qi [PPT]
PPT
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
F#+Erlangで簡単なシューティングゲームを作ってみている
I phoneアプリ入門 第5回
(きっと)あなたにも出来る!Hyperledger composer でブロックチェーンアプリを動かしてみた
BMXUG つきじ#4
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Impractical Introduction of Boost Spirit Qi [PPT]
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」

Viewers also liked (9)

PDF
Objective-Cのメモリ管理
PDF
Objective-CのBlocksの循環参照に関する僕なりのベストプラクティス
PDF
Swiftとメソッドのアレコレ
PDF
最近遊んだ Wii Uの 3つのソフトの感想
PPTX
これからの時代に! パソコン離れの中のパソコン選び
PDF
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
PDF
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PDF
テストを書こう、Unity編
Objective-Cのメモリ管理
Objective-CのBlocksの循環参照に関する僕なりのベストプラクティス
Swiftとメソッドのアレコレ
最近遊んだ Wii Uの 3つのソフトの感想
これからの時代に! パソコン離れの中のパソコン選び
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
最強オブジェクト指向言語 JavaScript 再入門!
テストを書こう、Unity編
Ad

objective-c propertyの属性について