有沒有一個容器,可以放入任何東西啊?! 就像我的口袋一樣,不論是任何的行動裝置,甚至是錢,一樣都可以放在我的口袋裡,這樣多好啊! |
我是id型別, 沒問題,我就像是一個萬用的口袋, 幫你裝下任何東西。 |
1. 建立iPad、iPadmini與iPhone
- 建立iPad、iPadmini與iPhone類別,大致定義如下:
Internet3G.h
#import <Foundation/Foundation.h>
@protocol Internet3G <NSObject>
//協定中,有個是否3G已連結的屬性
@property bool is3GConnected;
//協定中,定義透過3G連結的方法
-(void) connectInternetWith3G;
@end
iPad.h
#import <Foundation/Foundation.h>
@interface iPad : NSObject
-(void) connectInternetWithWifi;
@end
iPadmini.h
#import "Internet3G.h"
#import <Foundation/Foundation.h>
//透過箭號"<>"實作Internet3G協定
@interface iPadmini : iPad <Internet3G>
@end
iPhone.h
#import "Internet3G.h"
#import <Foundation/Foundation.h>
//透過箭號"<>"實作Internet3G協定
@interface iPhone : NSObject <Internet3G>
-(void)connectInternetWithWifi;
@end
2. id型別的變數,裝下iPad、iPadmini與iPhone
- id型別的變數可以裝下任何型別的物件,因此不論是iPad、iPadmini或iPhone皆可裝入變數中,所有的物件皆可視為id來對待
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPadmini.h"
#import "iPhone.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * pad1 = [[iPad alloc] init];
iPadmini * padmini1 = [[iPadmini alloc] init];
iPhone * phone1 = [[iPhone alloc] init];
//不論是什麼,
//只要是類別皆可視為id型別的物件,
//因此id型別的變數可以裝下任何物件
id device1 = pad1;
id device2 = padmini1;
id device3 = phone1;
}
return 0;
}
檔案連結:objective_c_id.zip
id是一個指標結構:
- 為何id的變數不需要搭配星號"*"將變數宣告成指標變數? 因為id即是一個指標結構,因此原本就是一個指標變數,並不需要另外使用星號"*"