objective-c基本資料型別【轉】
1、Object-c提供基本資料型別:int、float 、double 、char
示例程式碼測位元組數:
- //資料型別:
- //整形(int、short int、long int、unsigned int、unsigned short、unsigned long)
- NSLog(@"整形:");
- NSLog(@"%lu",sizeof(int));//整形4個位元組
- NSLog(@"%lu",sizeof(shortint));//短整形2
-
NSLog(@"%lu",sizeof(longint));//長整形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(longdouble));//長精度形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
- #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
- #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,而不是物件)。
(六)IMPIMP是一個指向函式的指標,這個被指向的函式包括id(“self”指標),呼叫的SEL(方法名),再加上一些其他引數。
說白了IMP就是實現方法。
(六)class與java類似,你可以使用class類來獲得一個物件所屬的類
(七)Method
Method(我們常說的方法)表示一種型別,這種型別與selector和實現(implementation)相關。
ok!