Objective-C 入門指南 - @property 與 @synthesize

@property 寫在介面檔 (interface file) 裡, @synthesize 則是要放在實作檔 (implementation file) 中




我們的介面檔 Encrypt.h 如下
#import <Foundation/Foundation.h>

@interface Encrypt: NSObject
{
    NSMutableArray *cArray;
    NSArray *oArray;
}

@property (retain) NSMutableArray *cArray;
@property (retain) NSArray *oArray;

- (id) initRandomEncrypt;
- (NSString *) toEncode: (NSString *) s;
- (NSString *) toDecode: (NSString *) s;

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Encrypt.h
   功能:示範 Objective-C 程式 
   作者:張凱慶
   時間:西元 2012 年 7 月 */


基本上利用 @property 就不需要用大括弧額外宣告屬性,可是在 Xcode 3.1 會發生編譯錯誤,因此我們的介面檔仍有加進大括弧宣告屬性。


@property 的宣告 (declaration) 如同大括弧中的屬性 (property) ,同樣要標明屬性的型態 (type)
@property (retain) NSMutableArray *cArray;
@property (retain) NSArray *oArray;


此外還有小括弧的宣告值,有三大類,如下表
讀寫性
屬性值說明
readwrite設定屬性可讀寫
readonly設定屬性唯讀
setter 相關
屬性值記憶體管理種類說明
strongARC設定擁有權
weakARC設定沒有擁有權
copy非 ARC先 release 再 copy 新值
assign非 ARC直接指派,不進行 retain
retain非 ARC先 release 再 retain 新值
自動性
屬性值說明
nonatomic設定為非自動,預設為自動


這裡,我們只有用 retain ,工作就是將引用計數 (reference count) 遞增。


對應到實作檔,我們的 Encrypt.m 雛型如下
#import <Foundation/Foundation.h>
#import "Encrypt.h"

@implementation Encrypt

@synthesize cArray, oArray;

- (id) initRandomEncrypt
{}

- (NSString *) toEncode: (NSString *) s
{}

- (NSString *) toDecode: (NSString *) s
{}

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Encrypt.m
   功能:示範 Objective-C 程式 
   作者:張凱慶
   時間:西元 2012 年 7 月 */


@synthesize 只要放屬性名稱就可以了
@synthesize cArray, oArray;


有三個方法 (method) 等著實作,別急,我們先來詳細討論一下屬性之一的 oArray ,也就是 NSArray 類別 (class) 囉!


中英文術語對照
介面檔interface file
實作檔implementation file
宣告declaration
屬性property
型態type
引用計數reference count
方法method
類別class


您可以繼續參考
軟體開發


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

1 則留言:

closer 提到...

atomic/nonatomic 不是「自動性」。比較接近「一致性」,和 multi-thread programming 有關。