@propertyの属性 strong と weak

よくよく考えると?だった、@propertyの属性の「strong」と「weak」について

あっちこっちの資料を調べた結果、一応、こういうことなんじゃないかということを整理してみました。

間違っていたら、ごめんなさい。

確認環境:Xcode 7.2

まずは、動かして確認しましょう。

strong属性の「strongProperty」weak属性の「weakProperty」という2つのプロパティを持つ

「TESTClass001」クラスのクラスインターフェースを定義します。

なお、@propertyの属性は特に何も指定しなければ、「strong」になります。

"@propertyの属性 strong と weak" の続きを読む

delegate と protocol

View ControllerとTable Viewを例にして、

「delegate」と「protocol」について整理してみました。

確認環境:Xcode 7.2

ユーザーは、テーブルビューのセルをタップしたり、スクロールしたりします。

この時に発生したイベントのいくつかを、テーブルビューが処理するのではなく、

ビューコントローラーに処理を任せます。

このことを、デリゲート(delegate)と言います。

"delegate と protocol" の続きを読む

@propertyの属性 atomic と nonatomic

@propertyの属性の「atomic」と「nonatomic」について整理してみました。

確認環境:Xcode 7.2

Appleの文書には、「atomic」プロパティについて、以下のように記載されています。

なお、@propertyの属性は特に何も指定しなければ、「atomic」になります。

参考文書:

Objective-Cによるプログラミング

自動生成されたアクセサは、異なるスレッドからいくつか同時に呼び出したとしても、完全な形で値を取得/設定できる。

注意: プロパティのアトミック性は、スレッドセーフであるかどうかとは別の概念です。

あるスレッドが、アトミックなアクセサを使って、XYZPersonオブジェクトの姓と名前を変更する、

という状況を考えてみましょう。

同時に別のスレッドが姓と名前を取得しようとすれば、アトミックなゲッタは(クラッシュすることなく)完全な文字列を返しますが、

それが正しい組み合わせである保証はありません。

変更前に姓にアクセスし、変更後に名前にアクセスすると、

正しく対応していない氏名が得られることになるのです。

"@propertyの属性 atomic と nonatomic" の続きを読む

@synthesizeとは

@synthesizeで、オブジェクトのプロパティのインスタンス変数の名前を変更できます。

検証してみました。

確認環境:Xcode 7.2

こんな感じで「TESTClass001」クラスを作成します。

「someProperty」というプロパティと「someMethod」というメソッドを作成します。

"@synthesizeとは" の続きを読む

#pragma markとは

 

「#pragma mark」は、コメントのようなものです。

ソースコード内に区切りを入れます。

 

確認環境:Xcode 7.2

 

ソースコードの適当な箇所に「#pragma mark - 何か適当な名前」を入力します。

こんな感じで、区切りが入ります。

選択すると、ソースのその場所にJUMPします。

ソースコードが長くなった時に「#pragma mark」を使うと便利です。


Tip_01_01_003a