objective-c基礎資料型別 (Elementary Data Type)
1、Object-c提供基礎資料型別 (Elementary Data Type):int、float 、double 、char
範例程式碼測位元組數:
//資料類型: //整形(int、short int、long int、unsigned int、unsigned short、unsigned long) NSLog(@"整形:"); NSLog(@"%lu",sizeof(int));//整形4個位元組 NSLog(@"%lu",sizeof(short int));//短整形2 NSLog(@"%lu",sizeof(long int));//長整形8 NSLog(@"%lu",sizeof(unsigned int));//無符號整形4 NSLog(@"%lu",sizeof(unsigned short));//無符號短整形2 NSLog(@"%lu",sizeof(unsigned long));//無符號長整形8 //實形(float 、double 、long double) NSLog(@"實形:"); NSLog(@"%lu",sizeof(float));//浮點形4 NSLog(@"%lu",sizeof(double));//雙精確度形8 NSLog(@"%lu",sizeof(long double));//長精度形16 //字元型和字串形 char a='a'; char b=100; NSLog(@"%c,%c",a,b); NSLog(@"%i,%i",a,b); NSLog(@"我是字串");//字串形:@“我是字串”
運行結果:
2012-03-27 10:36:41.618 HelloWorld[724:707]整形:
2012-03-27 10:36:41.624 HelloWorld[724:707] 4
2012-03-27 10:36:41.625 HelloWorld[724:707] 2
2012-03-27 10:36:41.626 HelloWorld[724:707] 8
2012-03-27 10:36:41.627 HelloWorld[724:707] 4
2012-03-27 10:36:41.628 HelloWorld[724:707] 2
2012-03-27 10:36:41.628 HelloWorld[724:707] 8
2012-03-27 10:36:41.629 HelloWorld[724:707]實形:
2012-03-27 10:36:41.630 HelloWorld[724:707] 4
2012-03-27 10:36:41.630 HelloWorld[724:707] 8
2012-03-27 10:36:41.631 HelloWorld[724:707] 16
2012-03-27 10:36:41.632 HelloWorld[724:707] a,d
2012-03-27 10:36:41.633 HelloWorld[724:707] 97,100
2012-03-27 10:36:41.633 HelloWorld[724:707]我是字串
輸出格式符:
int:%i,%d,%o,%x
float:%f,%e,%g
double:%f,%e,%g
char:%c
限定符:
(long)
long int:%li
long double:%lf
(long long)
long long int:%lli
(short)
short int:%hi
2、其它類型:
(一)id類型
id類型是一個獨特的資料類型,在概念上,類似java的Object類,可以轉換為任何資料類型。換句話說,id類型變數可以存放任何資料類型的對象。在內部處理上,這種類型被定義為指向對象的指標,實際上是一個指向這種對象的執行個體變數的指標。需要注意的是id是一個指標,所以在使用id的時候不需要加星號;
比如說:id foo=nil;
該語句定義了一個nil指標,這個指標指向NSObject的任意一個子類。而“id *foo=nil"則定義了一個指標,這個指標指向另一個指標,被指向這個指標指向NSObject的一個子類;
下面是一個樣本:兩個不同的類(一個是學生類Student,一個是會員類Member),這兩個類擁有不同的成員變數和方法。
Student.h
#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;}@end
Member.h
#import <Foundation/Foundation.h>@interface Member : NSObject{ NSString *name; int age;}@property (nonatomic,retain)NSString *name;@property int age;-(void)print;-(void)setName:(NSString*)name1 andAge:(int)age1;@end
Member.m
#import "Member.h"@implementation Member@synthesize name,age;-(void)print{ NSLog(@"我的名字是:%@,我的年齡是%i",name,age); }-(void)setName:(NSString *)name1 andAge:(int)age1{ self.name=name1; self.age=age1;}@end
主函數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; [data print];
運行結果:
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類來獲得一個對象所屬的類
(七)Method
Method(我們常說的方法)表示一種類型,這種類型與selector和實現(implementation)相關。
ok!