2、其它類型:
(一)id類型
id類型是一個獨特的資料類型,在概念上,類似java的Object類,可以轉換為任何資料類型。換句話說,id類型變量可以存放任何資料類型的對象。在内部處理上,這種類型被定義為指向對象的指針,實際上是一個指向這種對象的執行個體變量的指針。需要注意的是id是一個指針,是以在使用id的時候不需要加星号;
比如說:id foo=nil;
該語句定義了一個nil指針,這個指針指向NSObject的任意一個子類。而“id *foo=nil"則定義了一個指針,這個指針指向另一個指針,被指向這個指針指向NSObject的一個子類;
下面是一個示例:兩個不同的類(一個是學生類Student,一個是會員類Member),這兩個類擁有不同的成員變量和方法。
Student.h
[cpp] view plaincopy
#import <Foundation/Foundation.h>
@interface Student : NSObject{
int sid;
NSString *name;
}
@property int sid;
@property (nonatomic,retain)NSString *name;
-(void)print;
-(void)setSid:(int)sid andName:(NSString*)name;
@end
Student.m
#import "Student.h"
@implementation Student
@synthesize sid,name;
-(void)print{
NSLog(@"我的學号是:%i,我的名字是:%@",sid,name);
-(void)setSid:(int) sid1 andName:(NSString *)name1{
self.sid=sid1;
self.name=name1;
Member.h
@interface Member : NSObject{
int age;
@property int age;
-(void)setName:(NSString*)name1 andAge:(int)age1;
Member.m
#import "Member.h"
@implementation Member
@synthesize name,age;
NSLog(@"我的名字是:%@,我的年齡是%i",name,age);
-(void)setName:(NSString *)name1 andAge:(int)age1{
self.age=age1;
主函數main.m裡:
id fo;
NSLog(@"%lu",sizeof(fo));
Member *member1=[[Member alloc]init];
[member1 setName:@"Sam" andAge:36];
id data;
data=member1;//由于id類型的通用性質,我們可以将建立好的對象指派給data;
[data print];
Student *student1=[[Student alloc]init];
[student1 setSid:1122334455 andName:@"Lee"];
data=student1;
運作結果:
2012-03-27 14:41:01.768 HelloWorld[440:707] 8
2012-03-27 14:41:01.769 HelloWorld[440:707] 我的名字是:Sam,我的年齡是36
2012-03-27 14:41:01.769 HelloWorld[440:707] 我的學号是:1122334455,我的名字是:Lee
注:id 類型可以通過類型轉化符可以将一般的id 類型的對象轉換成特定的對象。
看上面程式中有@property和@synthesize修飾;
@property和@synthesize,在接口檔案中使用@property來辨別屬性(一般是執行個體變量),在實作檔案中使用@synthesize辨別所聲明的屬性,讓系統自動生成設定方法和擷取方法.
格式:@property (屬性清單)執行個體變量,
(二)枚舉資料類型、typedef 文法以及資料類型的轉換和C 是一樣。
(三)BOOL布爾值:
布爾值為YES/NO,或1/0.假是0;這個沒什麼好說的
(四)sel選擇器
選擇器就是指向方法的一個指針,可以簡單了解為程式運作到這裡就會執行指定的方法;
(五)nil和Nil
nil和C語言的NULL相同。nil表示一個Objctive-C對象,這個對象的指針指向空(沒有東西就是空)。
而Nil首字母大寫的Nil和nil有一點不一樣,Nil定義一個指向空的類(是Class,而不是對象)。
(六)IMP
IMP是一個指向函數的指針,這個被指向的函數包括id(“self”指針),調用的SEL(方法名),再加上一些其他參數。
說白了IMP就是實作方法。
(六)class
與java類似,你可以使用class類來獲得一個對象所屬的類