——- android培训、IOS培训、期待与您交流! ———-
如何定义类
以定义一个Fraction
类为例:
//Fraction.h文件
#import<Foundation/Foundation.h>
@interface Fraction :NSObject
{
intnumerator;
intdenominator;
}
-(void)print;
- (void)setNumberator:(int)n;
- (void)setDenominator:(int)d;
@end
//Fraction.m实现文件
@implementation Fraction
-(void)print
{
NSLog(@"%i/%i",numerator,denominator);
}
- (void)setNumberator:(int)n
{
numerator=n;
}
- (void)setDenominator:(int)d
{
denominator=d;
}
@end
如何使用类
初始化对象
Fraction *myFraction=[[Fractionalloc] init] ;
调用对象方法
[myFraction setNumerator :1]
用完记得释放掉对象
[myFraction release];
实例变量作用域的指令:
@protected
实例变量可被该类及任何子类中定义的方法直接访问(默认的情况)。
@private
实例变量可被定义在该类的方法直接访问,不能被子类定义的方法直接访问。
@public
实例变量可被该类中定义的方法直接访问,也可被其他类或模块中定义的方法访问。使得其他方法或函数可以通过(->)来访问实例变量(不推荐用)。
@package
对于64位图像,可以在实现该类的图像的任何地方访问这个实例变量。
表示范围作用的结构体:NSRange
三种创建NSRange的方式
1.
NSRange range;
range.location=17;
range.length=4;
2.
NSRange range={17 ,4};
3.
NSRange range=NSMakeRange(17,4); (推荐)
表示字符串的类:NSString
创建格式化字符串
NSString *heigth = [NSString stringWithFormat:@"Youheigthis%dfeet,%dinches",5,11];
返回字符串中的字符的个数:
unsigned int length = [heigth length];
返回Bool值的字符串比较函数:
//比较两个字符串的内容是否相等
- (BOOL) isEqualToString:(NSString*)aString;
还可以使用方法compare :
//逐个字符比较
-(NSComparisonResult)compare :(NSString*)string;
不区分大小写的比较:
-(NSComparisonResult)compare :(NSString*)string
options :(unsigned)mask;
注意:
NSComparisonResult是一个枚举值
options是一个位掩码,即:NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch: 进行完全比较,区分大小写
NSNumericSearch: 比较字符串的字符个数,而不是字符值
检查字符串是否以另一个字符串开头
-(BOOL)hasPrefix:(NSString*)aString;
判断字符串是否是以另一个字符串结尾
-(BOOL)hasSuffix:(NSString*)aString;
如果想知道字符串内的某处是否包含其他字符串,使用方法 rangeOfString:
-(NSRange)rangeOfString :(NSString*)aString;
NSString是不可变的,NSMutableString是可变的。
创建方法为stringWithCapacity :
NSMutableString *string = [NSMutableStringstringWithCapacity :42];
使用appendString :或appendFormat: 来附加新字符串:
- (void) appendString:(NSString*)aString;
- (void) appendFormat:(NSString*)format,...;
可以使用deleteCharactersInRange: 方法删除字符串中的字符
- (void) deleteCharactersInRange: (NSRange)range;
数组
NSArray:用来存储对象的有序列表(任意类型的对象)
限制:
只能存储Objective—C的对象,
不能存储C语言的基本数据类型(int、float、enum、struct、或者NSArray 中的随机指针)。
同时也不能存储nil(对象的零值或NULL值)。
//创建一个新的NSArray
NSArray *array=[NSArray arrayWithObjects:@"one",@"two",nil];
//获得包含的对象个数
- (unsigned)count;
//获得特定索引处的对象
- (id)objectAtIndex :(unsigned int)index ;
使用componentsSeparatedByString :
来切分NSArray,
NSString *string=@"oop:ack:bork:greeble:ponies";
NSArray *chunks=[string componentsSeparatedByString:@":"];
使用componentsJoinedByString :
来合并NSArray中的元素并创建字符串
string=[chunks componentsJoinedByString :@":-)"];
NSArray是不可变数组,数组中包含的对象是可以改变的,但是数组对象本身是不会改变的。
可变数组NSMutableArray通过类方法arrayWithCapacity :
来创建可变数组
+ (id)arrayWithCapacity :(unsigned)numItems ;
NSMutableArray *array = [NSMutableArray arrayWithCapacity:17];
使用addObject :
在数组末尾添加对象
- (void)addObject :(id)anObject ;
//删除特定索引的对象
- (void)removeObjectAtIndex :(unsigned)index;
注:可变数组还可以在特定索引处插入对象,替换对象,为数组排序,NSArray还提供了大量好用的功能。
枚举
NSEnumerator 用来描述这种集合迭代器运算
想使用NSEnumerator,需要通过objectEnumerator
向数组请求枚举器:
-(NSEnumerator*)objectEnumerator;
可以像这样使用这个方法:
NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
注:若想从后向前枚举集合,使用方法
reverseobjectEnumerator;
也可以使用。
获得枚举器以后,开始while循环,每次循环都向这个枚举器请求它的nextObject
- (id)nextObject;//返回nil表明循环结束
注:在枚举的过程中不能改变数组容器。
快速枚举示例:
for(NSString *string in array){
NSLog(@"I found %@",string);
}
数组排序:
例如:一条记录就是一条卡片的信息,包括(NSString*name和NSString*email)
-(void)sort
{
[book sortUsingSelector:@selector(compareNames:)] ;
}
其中:
@selector(compareNames:)
//创建一个SEL类型的selector,sortUsingSelector:使用该方法比较数组中的两个元素,
sortUsingSelector:方法需要完成这样的比较,它先调用这个指定的selector方法,然后向数组(接受者)的第一条记录发送消息,比较其参数和此记录。指定方法的返回值为NSComparisonResult类型,返回值为:若小于返回NSOrderedAscending;相等返回NSOrderedSame;大于返回NSOrderedDescending
- (NSComparisonResult) compareNames: (id) element
{
return[namecompare:[elementname]];
}
NSDictionary:(关键字和定义的组合)
NSDictionary通常在给定一个关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你可以使用这个关键字查找相应的数值。
//使用dictionaryWithObjectsAndKeys :来创建字典
+(id)dictionaryWithObjectsAndKeys :(id)firstObject,...
例如:
Tire*t1=[Tire new];
NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys :t1,@"front-left",nil];
使用方法objectForKey :来获取字典中的值
- (id)objectForKey :(id)akey;
查找可以这样:
Tire *tire=[tiresobjectForkey:@"front-left"];
创建新的NSMutableDictionary对象,向类NSMutableDictionary发送dictionary消息。也可以使用方法dictionaryWithCapacity: 来创建新的可变字典
+(id)dictionaryWithCapacity:(unsignedint)numItems ;
可以使用方法setObject :forKey :给字典添加元素
setObject :forKey :(id)aKey
下面是另一种使用发送dictionary消息来创建字典的方法:
NSMutableDictionary*tires;
tires=[NSMutableDictionary dictionary];
[tires setObject :t1 forKey :@"front-left"];
若对字典中已有的关键字使用方法setObject :forKey :,则用新的替换可以使用方法removeObjectForKey: 来删除可变字典中的一个关键字
- (void)removeObjectForKey:(id)aKey ;
不要去创建NSString、NSArray或NSDictionary的子类,实在要的话可以用复合的方式来解决问题。
使用这种方法枚举词典:
for(NSString *keying)
{
//....
}