天天看點

IOS開發

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類來獲得一個對象所屬的類