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

Viewers also liked

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

Viewers also liked (9)

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

Recently uploaded

論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 

Recently uploaded (9)

論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 

objective-c propertyの属性について