#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//创建字符串
NSString *height;
/**类方法:
+(id) stringWithFormat: (NSString *) format,...
通过格式字符串和参数来创建NSString
省略号(。。。):可以接受多个以逗号分割的参数。
这声明方法时添加加号(+),那么这个方法为类方法,不需要创建实例就可以调用,通常用于创建心的实例,我们称用来创建新对象的类方法为工厂方法。
-------------------
objective-c运行时生成一个类的时候,它会创建一个代表该类的类对象。类对象包含了指向超类的指针,类名,和指向类方法列表的指针。类对象还包含一个long型数据,为新创建的类实例对象指定大小(以字节为单位)
类方法可以用来访问全局数据。
实例方法要用前导减号(-)来开始声明
*/
height=[NSString stringWithFormat:@"you heigh is %d feet,%d inches",5,11];
NSLog(height);
//length 返回字符串中字符的个数。-(unsigned int) length;
if([height length]>5){
NSLog(@"height length ------");
}
//字符串比较
/**
isEqualToString :可以用来比较接收方和当作参数传递来的字符串的内容是否相同,返回yes和no
*/
NSString *thing1=@"hello";
NSString *thing2=[[NSString alloc] initWithString:@"hello"];
if([thing1 isEqualToString:thing2]){
NSLog(@"they are same");
}
/**
==:只判断指针数值,而不是它们所指向的内容
*/
if(thing1==thing2){
NSLog(@"== same");
}
/*
compare:比较两个字符串。区分大小写
compare将接收对象和传递来的字符串逐个字符的进行比较,它返回一个NSComparisonResult(枚举类型)来显示结果。
typedef enum _NSComparisonResult{
NSOrderedAscending=-1;
NSOrderedsame;
NSOrderedDescending;
} NSComparisonResult;
*/
[thing1 compare:thing2];
if(NSOrderedSame==[thing1 compare:thing2]){
NSLog(@"compare same");
}
//compare:options:
/***
-(NSComparisonResult) compare:(NSString *) string
options:(unsinged) mask;
options 是一个位掩码,可以使用|添加选项标记
选项:
NSCaseInsensitiveSearch:不区分大小写字符
NSLiteralSearch:进行完全比较,区分大小写
NSNumbericSearch:比较字符串的字符个数,而不是字符值
*/
if([thing1 compare:thing2 options:NSCaseInsensitiveSearch|
NSNumericSearch]==NSOrderedSame){
NSLog(@"they match");
}
/**
以某个字符串开始或结尾
-(BOOL) hasPrefix:(NSString *) aString;
-(BOOL) hasSuffix:(NSString *) aString;
*/
NSString *fileName=@"aabbbcc";
if([fileName hasPrefix:@"aa"]){
NSLog(@"begin with aa");
}
if([fileName hasSuffix:@"cc"]){
NSLog(@"end with cc");
}
//NSMutableString 可变字符串
//SString 是不可变的,一旦NSString 被创建了,我们就不能改变它。
//+(id) stringWithCapacity:(unsinged) capacity; capacity:是给NSMutableString的一个建议,字符串的大小并不局限于所提供的大小,这个容量仅是个最优值。
NSMutableString *str=[NSMutableString stringWithCapacity:40];
[str appendFormat:@"sdfsdf%d",5];
[str appendString:@"ssssssss"];
NSLog(str);
//删除字符串
//-(void) deleteCharactersInRange:(NSRange) range;
NSMutableString *ms;
ms=[NSMutableString stringWithCapacity:50];
[ms appendString:@"aabbccdd"];
NSRange range;
range=[ms rangeOfString:@"cc"];
[ms deleteCharactersInRange:range];
NSLog(ms);
//与实例方法一样,继承对类方法也同样适用
//------------------集合--------------
//NSArray ,NSDictionary
/**
NSArray 是一个cocoa类,用来存储对象的有序列表。
NSArray有两个限制:1,它只能存储objective-c的对象,而不能存储c语言中的基本数据类型如int,float,enum,struct,或者nsarray中的随机指针。2,不能这nsarray中存储nil
类方法:
arrayWithObjects:创建一个新的nsarray。发送一个以逗号分割的对象列表,这列表结尾添加nil代表列表结束,(这就是不能这nsarray中存储nil的原因)
*/
NSArray *array=[NSArray arrayWithObjects:@"aa",@"bb",@"cc",nil];
//-(unsigned) count; 取得包含对象的个数
//-(id) objectAtIndex:(unsigned int) index; 取得索引位置的对象
int i;
for (i=0; i<[array count]; i++) {
NSLog(@"index %d has %@",i,[array objectAtIndex:i]);
}
//------------切分数组
//-componentsSeparatedByString:
NSString *ns=@"sdf,dsfs,dfd,fdf,df,dd";
NSArray *comArr=[ns componentsSeparatedByString:@","];
for(int i=0;i<[comArr count];i++){
NSLog(@"componentsSeparatedByString===%@",[comArr objectAtIndex:i]);
}
//componentJoinedByString: 合并nsarray中的元素来创建字符串
NSString *joinedStr=[comArr componentsJoinedByString:@"-->"];
NSLog(@"joined---= %@",joinedStr);
//可变数组
NSMutableArray *mutableArr=[NSMutableArray arrayWithCapacity:40];
[mutableArr addObject:@"aa"];
[mutableArr addObject:@"bb"];
[mutableArr addObject:@"cc"];
[mutableArr addObject:@"dd"];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"mutableArr==%@",[mutableArr objectAtIndex:i]);
}
//----- -(void) removeObjectAtIndex:(unsinged) index; 删除指定索引的对象,
//删除一个对象之后,数组中并没有留下漏洞,被删除对象后面的数组元素的哦被前移来填补空缺
[mutableArr removeObjectAtIndex:2];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"removeObjectAtIndex == %@",[mutableArr objectAtIndex:i]);
}
//枚举
//NSEnumerator ,它是cocoa用来描述这种集合迭代运输的方法
//-(NSEnumerator *) objectEnumerator;
NSEnumerator *enumerator=[mutableArr objectEnumerator];
id thingie;
while(thingie=[enumerator nextObject]){
NSLog(@"i found %@",thingie);
}
//快速枚举
for(NSString *string in mutableArr){
NSLog(@"for in == %@",string);
}
//NSDictionary 字典
/*
NSDictionary 是在给定的关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你可以用这个关键字来查找相应的数值。
NSDictionary 是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。
+(id) dictionaryWithObjectAndKeys:(id) firstObject,....;
该方法接收对象和关键字交替出现的系列,以nil值作为终止符号。
**/
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"aaa",@"a",@"bbb",@"b",nil];
NSString *dicStr=[dic objectForKey:@"a"];
if([dicStr isEqualToString:@"aaa"]){
NSLog(@"------------00000000000000000");
}
//可变字典
NSMutableDictionary *mutableDic=[NSMutableDictionary dictionaryWithCapacity:50];
[mutableDic setObject:@"1111" forKey:@"1"];
[mutableDic setObject:@"222" forKey:@"2"];
//删除 -(void) removeObjectForKe:(id) key;
[mutableDic removeObjectForKey:@"2"];
NSArray *keyArr=[mutableDic allKeys];
for(NSString *str in keyArr){
NSLog(@"key== %@",str);
NSLog(@"value== %@",[mutableDic objectForKey:str]);
}
//各种数值,NSNumber NSValue
/*
cocoa 提供了NSNumber类来包装基本数据类型
+(NSNumber *) numberWithChar:(char) value;
+(NSNumber *) numberWithInt:(int) value;
+(NSNumber *) numberWithFloat:(float) value;
+(NSNumber *) numberWthiBool:(BOOL) value;
-(char) charValue;
-(int) intVlaue;
-(float) floatValue;
-(BOOL) boolValue;
-(NSString *) stringValue;
**/
NSNumber *number;
number=[NSNumber numberWithInt:3];
[mutableDic setObject:number forKey:@"int"];
int num=[[mutableDic objectForKey:@"int"] intValue];
NSLog(@"int object value== %d",num);
//NSValue .NSNumber实际上是NSValue的子类,NSValue可以包装任意值
/**
+(NSValue *) valueWithBytes:(const void *) value objCType:(const char *) type;
传递的参数是你想要包装的数值的地址,通常,得到的是你想要存储的变量的地址(在c语言里适用操作符 & ),你也可以提供一个描述这个数据类型的字符串,通常用来说明struct中实体的类型和大小。你不用自己写代码
来生成这个字符串,@encode编译器指令可以接受数据类型的名称并为你生成合适的字符串
*/
NSRect rect= NSMakeRect(1, 2, 30, 40);
NSValue *value;
value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];
NSMutableArray *mr=[NSMutableArray arrayWithCapacity:50];
[mr addObject:value];
//getValue 提取数据
/**
-(void) getValue:(void *) value; 要传递的是存储这个数值的变量的地址
*/
/***
value=[mr objectAtIndex:0];
NSRect r;
NSLog(@"00000 ===%@",r);
[value getValue:&r];
NSLog(@"111== %@",r);
*/
/**
+(NSValue *) valueWithPoint:(NSPoint) point;
+(NSValue *) valueWithSize:(NSSize) size;
+(NSValue *) valueWithRect:(NSRect) rect;
-(NSPoint) pointValue;
-(NSSize) sizeValue;
-(NSRect) rectValue;
*/
//NSNull
/*
*+(NSNull *) null;
*/
[mutableDic setObject:[NSNull null] forKey:@"fax"];
id fax;
fax=[mutableDic objectForKey:@"fax"];
if(fax==[NSNull null]){
NSLog(@"pppppppppppppppppp");
}
[pool drain];
return 0;
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//创建字符串
NSString *height;
/**类方法:
+(id) stringWithFormat: (NSString *) format,...
通过格式字符串和参数来创建NSString
省略号(。。。):可以接受多个以逗号分割的参数。
这声明方法时添加加号(+),那么这个方法为类方法,不需要创建实例就可以调用,通常用于创建心的实例,我们称用来创建新对象的类方法为工厂方法。
-------------------
objective-c运行时生成一个类的时候,它会创建一个代表该类的类对象。类对象包含了指向超类的指针,类名,和指向类方法列表的指针。类对象还包含一个long型数据,为新创建的类实例对象指定大小(以字节为单位)
类方法可以用来访问全局数据。
实例方法要用前导减号(-)来开始声明
*/
height=[NSString stringWithFormat:@"you heigh is %d feet,%d inches",5,11];
NSLog(height);
//length 返回字符串中字符的个数。-(unsigned int) length;
if([height length]>5){
NSLog(@"height length ------");
}
//字符串比较
/**
isEqualToString :可以用来比较接收方和当作参数传递来的字符串的内容是否相同,返回yes和no
*/
NSString *thing1=@"hello";
NSString *thing2=[[NSString alloc] initWithString:@"hello"];
if([thing1 isEqualToString:thing2]){
NSLog(@"they are same");
}
/**
==:只判断指针数值,而不是它们所指向的内容
*/
if(thing1==thing2){
NSLog(@"== same");
}
/*
compare:比较两个字符串。区分大小写
compare将接收对象和传递来的字符串逐个字符的进行比较,它返回一个NSComparisonResult(枚举类型)来显示结果。
typedef enum _NSComparisonResult{
NSOrderedAscending=-1;
NSOrderedsame;
NSOrderedDescending;
} NSComparisonResult;
*/
[thing1 compare:thing2];
if(NSOrderedSame==[thing1 compare:thing2]){
NSLog(@"compare same");
}
//compare:options:
/***
-(NSComparisonResult) compare:(NSString *) string
options:(unsinged) mask;
options 是一个位掩码,可以使用|添加选项标记
选项:
NSCaseInsensitiveSearch:不区分大小写字符
NSLiteralSearch:进行完全比较,区分大小写
NSNumbericSearch:比较字符串的字符个数,而不是字符值
*/
if([thing1 compare:thing2 options:NSCaseInsensitiveSearch|
NSNumericSearch]==NSOrderedSame){
NSLog(@"they match");
}
/**
以某个字符串开始或结尾
-(BOOL) hasPrefix:(NSString *) aString;
-(BOOL) hasSuffix:(NSString *) aString;
*/
NSString *fileName=@"aabbbcc";
if([fileName hasPrefix:@"aa"]){
NSLog(@"begin with aa");
}
if([fileName hasSuffix:@"cc"]){
NSLog(@"end with cc");
}
//NSMutableString 可变字符串
//SString 是不可变的,一旦NSString 被创建了,我们就不能改变它。
//+(id) stringWithCapacity:(unsinged) capacity; capacity:是给NSMutableString的一个建议,字符串的大小并不局限于所提供的大小,这个容量仅是个最优值。
NSMutableString *str=[NSMutableString stringWithCapacity:40];
[str appendFormat:@"sdfsdf%d",5];
[str appendString:@"ssssssss"];
NSLog(str);
//删除字符串
//-(void) deleteCharactersInRange:(NSRange) range;
NSMutableString *ms;
ms=[NSMutableString stringWithCapacity:50];
[ms appendString:@"aabbccdd"];
NSRange range;
range=[ms rangeOfString:@"cc"];
[ms deleteCharactersInRange:range];
NSLog(ms);
//与实例方法一样,继承对类方法也同样适用
//------------------集合--------------
//NSArray ,NSDictionary
/**
NSArray 是一个cocoa类,用来存储对象的有序列表。
NSArray有两个限制:1,它只能存储objective-c的对象,而不能存储c语言中的基本数据类型如int,float,enum,struct,或者nsarray中的随机指针。2,不能这nsarray中存储nil
类方法:
arrayWithObjects:创建一个新的nsarray。发送一个以逗号分割的对象列表,这列表结尾添加nil代表列表结束,(这就是不能这nsarray中存储nil的原因)
*/
NSArray *array=[NSArray arrayWithObjects:@"aa",@"bb",@"cc",nil];
//-(unsigned) count; 取得包含对象的个数
//-(id) objectAtIndex:(unsigned int) index; 取得索引位置的对象
int i;
for (i=0; i<[array count]; i++) {
NSLog(@"index %d has %@",i,[array objectAtIndex:i]);
}
//------------切分数组
//-componentsSeparatedByString:
NSString *ns=@"sdf,dsfs,dfd,fdf,df,dd";
NSArray *comArr=[ns componentsSeparatedByString:@","];
for(int i=0;i<[comArr count];i++){
NSLog(@"componentsSeparatedByString===%@",[comArr objectAtIndex:i]);
}
//componentJoinedByString: 合并nsarray中的元素来创建字符串
NSString *joinedStr=[comArr componentsJoinedByString:@"-->"];
NSLog(@"joined---= %@",joinedStr);
//可变数组
NSMutableArray *mutableArr=[NSMutableArray arrayWithCapacity:40];
[mutableArr addObject:@"aa"];
[mutableArr addObject:@"bb"];
[mutableArr addObject:@"cc"];
[mutableArr addObject:@"dd"];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"mutableArr==%@",[mutableArr objectAtIndex:i]);
}
//----- -(void) removeObjectAtIndex:(unsinged) index; 删除指定索引的对象,
//删除一个对象之后,数组中并没有留下漏洞,被删除对象后面的数组元素的哦被前移来填补空缺
[mutableArr removeObjectAtIndex:2];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"removeObjectAtIndex == %@",[mutableArr objectAtIndex:i]);
}
//枚举
//NSEnumerator ,它是cocoa用来描述这种集合迭代运输的方法
//-(NSEnumerator *) objectEnumerator;
NSEnumerator *enumerator=[mutableArr objectEnumerator];
id thingie;
while(thingie=[enumerator nextObject]){
NSLog(@"i found %@",thingie);
}
//快速枚举
for(NSString *string in mutableArr){
NSLog(@"for in == %@",string);
}
//NSDictionary 字典
/*
NSDictionary 是在给定的关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你可以用这个关键字来查找相应的数值。
NSDictionary 是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。
+(id) dictionaryWithObjectAndKeys:(id) firstObject,....;
该方法接收对象和关键字交替出现的系列,以nil值作为终止符号。
**/
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"aaa",@"a",@"bbb",@"b",nil];
NSString *dicStr=[dic objectForKey:@"a"];
if([dicStr isEqualToString:@"aaa"]){
NSLog(@"------------00000000000000000");
}
//可变字典
NSMutableDictionary *mutableDic=[NSMutableDictionary dictionaryWithCapacity:50];
[mutableDic setObject:@"1111" forKey:@"1"];
[mutableDic setObject:@"222" forKey:@"2"];
//删除 -(void) removeObjectForKe:(id) key;
[mutableDic removeObjectForKey:@"2"];
NSArray *keyArr=[mutableDic allKeys];
for(NSString *str in keyArr){
NSLog(@"key== %@",str);
NSLog(@"value== %@",[mutableDic objectForKey:str]);
}
//各种数值,NSNumber NSValue
/*
cocoa 提供了NSNumber类来包装基本数据类型
+(NSNumber *) numberWithChar:(char) value;
+(NSNumber *) numberWithInt:(int) value;
+(NSNumber *) numberWithFloat:(float) value;
+(NSNumber *) numberWthiBool:(BOOL) value;
-(char) charValue;
-(int) intVlaue;
-(float) floatValue;
-(BOOL) boolValue;
-(NSString *) stringValue;
**/
NSNumber *number;
number=[NSNumber numberWithInt:3];
[mutableDic setObject:number forKey:@"int"];
int num=[[mutableDic objectForKey:@"int"] intValue];
NSLog(@"int object value== %d",num);
//NSValue .NSNumber实际上是NSValue的子类,NSValue可以包装任意值
/**
+(NSValue *) valueWithBytes:(const void *) value objCType:(const char *) type;
传递的参数是你想要包装的数值的地址,通常,得到的是你想要存储的变量的地址(在c语言里适用操作符 & ),你也可以提供一个描述这个数据类型的字符串,通常用来说明struct中实体的类型和大小。你不用自己写代码
来生成这个字符串,@encode编译器指令可以接受数据类型的名称并为你生成合适的字符串
*/
NSRect rect= NSMakeRect(1, 2, 30, 40);
NSValue *value;
value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];
NSMutableArray *mr=[NSMutableArray arrayWithCapacity:50];
[mr addObject:value];
//getValue 提取数据
/**
-(void) getValue:(void *) value; 要传递的是存储这个数值的变量的地址
*/
/***
value=[mr objectAtIndex:0];
NSRect r;
NSLog(@"00000 ===%@",r);
[value getValue:&r];
NSLog(@"111== %@",r);
*/
/**
+(NSValue *) valueWithPoint:(NSPoint) point;
+(NSValue *) valueWithSize:(NSSize) size;
+(NSValue *) valueWithRect:(NSRect) rect;
-(NSPoint) pointValue;
-(NSSize) sizeValue;
-(NSRect) rectValue;
*/
//NSNull
/*
*+(NSNull *) null;
*/
[mutableDic setObject:[NSNull null] forKey:@"fax"];
id fax;
fax=[mutableDic objectForKey:@"fax"];
if(fax==[NSNull null]){
NSLog(@"pppppppppppppppppp");
}
[pool drain];
return 0;
}