我是iOS工程師,煩! 這麼多的iPad的資訊散落在程式中,好難管啊! 若1台iPad有3個資訊,10台iPad不就要用30個變數來存放iPad資訊了!!! |
我是類別class, 我可以幫你定義什麼是iPad, 並將資訊定義於其中。 |
我是物件Object, 我依照類別class的定義產生出一台台iPad, 如此你就可以透過我表示每一台iPad, 當然,iPad相關的資訊也會包含在其中。 |
1. 建立iPad類別
- 新增Objective-C class檔案,取名為iPad,以透過class描述什麼是iPad
- 建立後會產生iPad.h與iPad.m兩個檔案
2. 宣告iPad實體變數
- 在iPad.h檔中,會以@interface與@end來表示類別的開始與結束,而@interface後方即是類別的名字iPad
- 於@interface與@end之間加上大括號,分別宣告UDID(裝置識別碼)、Type(機型)、Capacity(容量)等3個iPad資訊
- 加上@public,開放實體變數的存取權限
#import <Foundation/Foundation.h>
@interface iPad : NSObject
{
@public NSString * UDID;
NSString * Type;
NSInteger Capacity;
}
@end
3. 建立iPad物件,以表示一台台的iPad
- 透過#import "iPad.h"引用iPad類別
- 透過alloc與init方法分別建立3台iPad類別,如下範例,如此就可以以物件的方式管理iPad資訊了
#import <Foundation/Foundation.h>
#import "iPad.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * pad1 = [[iPad alloc] init];
pad1->UDID = @"abc123-111-111-111";
pad1->Type = @"iPad";
pad1->Capacity = 16;
iPad * pad2 = [[iPad alloc] init];
pad2->UDID = @"abc456-222-222-222";
pad2->Type = @"iPad 2";
pad2->Capacity = 16;
iPad * pad3 = [[iPad alloc] init];
pad3->UDID = @"abc789-333-333-333";
pad3->Type = @"iPad Air";
pad3->Capacity = 16;
}
return 0;
}
檔案連結:objective_c_class_object.zip
實體變數的存取權限:
@package => 同一個套件可存取
@private => 僅限於此物件本身可存取,即為類別中撰寫程式時使用,此為預設的存取權限
@protected => 僅限於此物件本身與繼承的物件可存取,即為類別或繼承的類別撰寫程式時使用
@public => 完全開放權限
為何類別是@interface,而不是@class?
在Objective-C中,確實是使用@interface作為類別宣告的關鍵字,可能因.h與.m檔的分離概念有關,.h純粹只是定義,因此使用interface的字眼表示類別功能的定義
為何類別是@interface,而不是@class?
在Objective-C中,確實是使用@interface作為類別宣告的關鍵字,可能因.h與.m檔的分離概念有關,.h純粹只是定義,因此使用interface的字眼表示類別功能的定義