導航:數組
基本類型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排序的。