Object-c 中的數據類型

導航:數組

基本類型app

IDthis

對象類型常見的有atom

對象類型spa

-NSLog指針

-NSNumbercode

-NSString和NSMutableString對象

-NSArray和NSMutableArray排序

-NSSet和NSMutableSet接口

-NSDictionary和NSMutableDictionary


基本類型:

Objective-C中的基本類型和C語言中的基本類型同樣.主要有:int,long,float,double,char,void, bool等.

在Foundation中,也爲些數據定義了別名,如:NSInteger爲long,CGFloat爲double,BOOL等.

Objective-C也能夠用C語言的構造類型,如數組、結構體、同用體等。

對於基本類型變量,不須要用指針,也不用手動回收,方法執行結束會自動回收。


ID:

在object-c中,對象標識被做爲一個特殊的數據類型:id。這個數據類型定義爲引用對象的指針。其實是指向對象實例變量的指針。


對象類型常見的有:

NSlog

NSString

NSInteger

NSURL

NSImage

NSNumber


NSLog

格式以下

%@對象

%d,%i整數

%u無符整形

%f浮點/雙字

%x,%X二進制整數

%zu size_t %p指針

%e浮點/雙字

%g浮點/雙字

%s C字符串

%*s Pascal字符串

%c 字符

%C unicha

%lld 64位長整數

(long long)%llu無符64位長整數

%Lf 64位雙字


NSNumber

NSNumber是Objective-c的數字對象。需求考慮內存釋放問題。

1   NSNumber *number = [NSNumber numberWithInt:123];
2   NSLog(@"%i",[number intValue]);
3   NSLog(@"%i",[number retainCount]);

//輸出

2010-12-29 16:02:35.040 HelloWorld[4710:a0f] 123

2010-12-29 16:02:35.042 HelloWorld[4710:a0f] 1

NSString和NSMutableString

NSString是不可變字符串(NSContantString),其變量和其本類型同樣不須要手動釋放(它的retainCount爲-1)。

NSString賦值:

NSString *str1 = @"str....";  //(不須要手動釋放)
NSString *str2 = [[NSString alloc] initWithString:@"str..."]; //不須要手動釋放

由於對NSString賦值,會產生成的對象,所在方法中用NSString做臨時對象,也要考慮內存開消問題。

NSMutableString是可變字符串,若用 「[[NSMutableString alloc] init...]」方法初始化,須要考慮手動釋放。

1     NSString *str = @"this is str...";
2     NSMutableString *mstr = [NSMutableString stringWithString:str];
3     str = @"sss";
4     NSLog(@"%@",mstr);
5     NSLog(@"%@",str);

輸出:

1 this is str...
2 sss

注:由於NSMutableString是NSString的子類,實際應用中很能夠把NSMutableString變量賦給NSString。因此若用NSString作類的屬性,也會用手動釋放的方式:

 1 //接口文件
 2  @interface TestProperty : NSObject {
 3     NSString *name;
 4     NSInteger myInt;
 5 }
 6 
 7 @property (copy,nonatomic) NSString *name;
 8 @property NSInteger myInt;
 9 
10 @end

 1 //實現類
 2  @implementation TestProperty
 3 @synthesize name;
 4 @synthesize myInt;
 5  
 6  -(void) dealloc{
 7     self.name = nil;
 8     [super dealloc];
 9 }
10  
11 @end

例:

代碼

 1 int main (int argc, const char * argv[]) {
 2   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 3   
 4   NSMutableString *str1 = [NSMutableString stringWithString:@"this is str"];
 5   NSMutableString *str2 = [NSMutableString stringWithString:str1];
 6   [str2 appendString:@"sss"];
 7   NSLog(@"%@",str1);
 8   NSLog(@"%@",str2);
 9   [pool drain];
10   return 0;
11 }
12 
13  //輸出
14  2010-12-30 11:43:13.511 HelloWorld[2119:a0f] this is str
15  2010-12-30 11:43:13.521 HelloWorld[2119:a0f] this is strsss
16 
17 能夠看出str2不是指向str1的,而是新的對象!!

 

NSArray和NSMutableArray

NSArray是不可變數組,通常用於保存固定數據。和NSString不一樣的是,NSArray有retainCount,因此釋放問題。

NSMubleArray是變數組,能夠直接對其值進行操做。也可考慮釋放問題。

NSMubleArray是NSArray的子類。

 1     NSArray *arr = [NSArray arrayWithObjects:@"Sep",@"Januay",@"",nil];
 2     NSArray *arr_ = [arr sortedArrayUsingSelector:@selector(compare:)];
 3     NSLog(@"%i",[arr retainCount]);
 4     for(NSString *name in arr_){
 5         NSLog(@"%@",name);
 6     }
 7 
 8  //輸出
 9  2010-12-29 13:36:16.830 HelloWorld[3325:a0f] 1
10  2010-12-29 13:36:16.833 HelloWorld[3325:a0f] Januay
11  2010-12-29 13:36:16.833 HelloWorld[3325:a0f] Sep

代碼

 1     NSMutableArray *arr = [NSMutableArray   arrayWithObjects:@"Sep",@"Januay",@"",nil];
 2     [arr sortUsingSelector:@selector(compare:)];
 3     NSLog(@"%i",[arr retainCount]);
 4     for(NSString *name in arr){
 5         NSLog(@"%@",name);
 6     }
 7 
 8  //輸出
 9 2010-12-29 13:41:34.925 HelloWorld[3415:a0f] 1
10 2010-12-29 13:41:34.928 HelloWorld[3415:a0f] Januay
11 2010-12-29 13:41:34.930 HelloWorld[3415:a0f] Sep

NSSet和NSMutableSet

 NSSet和NSMutableSet分別是不可變集合和可變集合。集合是一組單值的操做。NSSet和NSMutableSet都須要考慮釋放問題。

代碼

1     NSSet *set = [NSSet setWithObjects:[NSNumber numberWithInt:10],@"bb",@"aa",@"bb",@"aa",nil];
2     for(id *obj in set){
3         NSLog(@"%@",obj);
4     }
5     NSLog(@"%i",[set count]);
6     NSLog(@"%i",[set retainCount]);

//輸出

2010-12-29 13:56:08.397 HelloWorld[3709:a0f] 10

2010-12-29 13:56:08.400 HelloWorld[3709:a0f] aa

2010-12-29 13:56:08.401 HelloWorld[3709:a0f] bb

2010-12-29 13:56:08.401 HelloWorld[3709:a0f] 3

2010-12-29 13:56:08.402 HelloWorld[3709:a0f] 1

NSDictionary和NSMutableDictionary

dictionary是由鍵-對象對組成的數據集合。NSDictionay和NSMutableDicionary都須要考慮內存釋放問題。

代碼

1     NSDictionary *dict = [NSDictionary
2                           dictionaryWithObjects:[NSArray arrayWithObjects:@"val1",@"val2",nil]
3                           forKeys:[NSArray arrayWithObjects:@"key2",@"key1",nil]];
4    
5     for(NSString *key in dict){
6         NSLog(@"%@",[dict objectForKey:key]);
7     }
8     NSLog(@"%i",[dict retainCount]);
9     [pool drain];

//輸出

2010-12-29 15:37:42.745 HelloWorld[4085:a0f] val2

2010-12-29 15:37:42.748 HelloWorld[4085:a0f] val1

2010-12-29 15:37:42.749 HelloWorld[4085:a0f] 1

由上面結果能夠看出Dicionary是按Key排序的。

相關文章
相關標籤/搜索