NSObejct
//是所有类的基础
//包含关于内省机制方法实现等
//-(NSString *)description //常常在子类里重写此方法,用来以字符串的形式输出该实例的属性信息,使用NSLog(@”%@”,obj)来调用。
//-(id)copy;
-(id)mutableCopy;
NSString
//使用Unicode,包含所有语言
//@”foo”会创建一个NSString
//NSString是不可变的(immutable)
//使用NSString的方法可以创建新的NSString
例:text = [text stringByAppendingString:digit]’
text = [NSString stringWithFormat:@”%g”,brain.operand];
NSMutableString
//可以更改的的NSString,可以通过对自己做出改变来实现一些NSString的方法,而不是创建一个新的字符串
//但是不太常用,因为没有NSString效率高
NSNumber
//代表一切跟数字有关的类型如int,float,double,BOOL,etc
//方便类型之间的转换,也方便存储这些类似的变量在array等数据结构里面。
例:NSNumber *num = [NSNumber numberWithInt:36];
float f = [num floatValue];
NSValue
//代表其它所有的non-object数据类型
例:CGPoint point = CGPointMake(23.0, 12,0); //CGPoint是一个C Struct
NSValue *pointObject = [NSValue valueWithCCGPoint:point];
NSData
//二进制数据包
NSDate
//用来查看现在的时间或者存储一个时间点
//类似的还有NSCalendar,NSDateFormatter,NSDateComponents
NSArray
//不可变的(immutable),不能增加或者删除元素
//创建时初始化
//+(id)arrayWithObjects:(id)firstObject,…; //参数以nil结尾
例:NSArray *primaryColors = [NSArray arrayWithObjects:@”red”, @”yellow”,@”blue”,nil];
//+(id)arrayWithObject:(id)soleObjectInTheArray; //只有一个元素的数组
//-(int)count;
//-(id)objectAtIndex:(int)index;
//-(id)lastObject; //如果是空数组则返回nil
//-(NSArray *)sortedArrayUsingSelector:(SEL)aSelector;
//-(void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)selctorArgument;
//-(BOOL)containsObject:(id)anObject; //可能会很慢,可以试着用NSOrderedSet
NSMutableArray
//可以增加和删除元素的数组
//初始化方法:
1. 类似NSArray
2. +(id)arrayWithCapacity:(int)initialSpace;
3. +(id)array;
//-(void)addObject:(id)anObject; //在数组末尾加入元素
//-(void)insertObject:(id)anObject arIndex:(int)index;
//-(void)removeObjectAtIndex:(int)index;
//-(void)removeLastObject;
//-(id)copy; //copy可变数组将返回一个不可变数组,mutableCopy不可变数组将返回一个可变数组
//NSMutableArray继承了NSArray里的所有方法
NSDictionary
//不可变的哈希表,look up objects using a key to get a value
//初始化方法:
1. +(id)dictionaryWithObjects:(NSArray )values forKeys:(NSArray )keys;
2. +(id)dictionaryWithObjectsAndKeys:(id)firstObjects,…;
例:NSDictionary *base = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:2], @”binary”, [NSNumber numberWithInt:16], @”hexadecimal”, nil];
//-(int)count;
//-(id)objectForKey:(id)key;
//-(NSArray *)allKeys;
//-(NSArray *)allValues;
//keys通过下面函数来判断是否互不相同:
-(NSUInteger)hash,返回独一无二的地址
-(BOOL)isEqual:(NSObject *)obj,只有在指针相同的时候才会返回YES
常常用NSString作为keys,NSString判断isEqual的时候,只要字符相同就是YES,无论指针是否相同。
也可以用其它的object作为key,只要object可以通过指针来区分是否相同。
NSMutableDictionary
//可更改的
//+(id)dictionary; //创建一个空dictionary
//-(void)setObject:(id)Object forKey:(id)key;
//-(void)removeObjectForKey:(id)key;
//-(void)removeAllObjects;
//-(void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
NSSet
//不可变的,无序的,存放不同的objects的集合
//不可以存放多个isEqual的objects(NSCountedSet可以)
//看可以用于检查某个元素是否已经在set中
//+(id)setWithObjects:(id)firstObject, …;
//+(id)setWithArray:(NSArray *)anArray;
//-(int)count;
//-(BOOL)containObj:(id)anObject;
//-(void)makeObjectPerformSelector:(SEL)aSelector;
NSMutableSet
//可变的NSSet
//-(void)addObject:(id)anObject; //如果已经存在,那么什么都不做
//-(void)removeObject:(id)anObject;
//-(void)unionSet:(NSSet *)otherSet;
//-(void)minusSet:(NSSet *)otherSet;
//-(void)intersectSetL(NSSet *)otherSet; //取两个sets的共有元素
NSOderedSet
//不可变的有序的不同的元素的集合
//不是NSSet的子类,但几乎包含NSSet的方法,功能介于array和set之间
//判断是否包含一个元素比array更快,但是不能存多个equal的元素
//-(int)indexOfObject:(id)anObject;
//-(id)objectAtIndex:(int)anIndex;
//-(id)firstObject;
//-(id)lastObject;
//-(NSArray *)array;
//-(NSSet *)set;
NSMutableOrderedSet
//可变的NSOrderedSet
//-(void)insertObject:(id)anObejct atIndex:(int)anIndex;
//-(void)removeObject:(id)anObject;
//-(void)setObject:(id)anObject atIndex:(int)anIndex;
使用for-in对集合进行循环操作(Fast Enumeration)
例:
NSArray *myArray = ...;
for(NSString *string in myArray)//编译器不会知道array里的元素是什么类别
{
double valus = [string doubleValue];//如果string不是一个NSString类那么运行时会崩溃
}
NSSet *mySet = ...;
for(id obj in mySet)
{
//对obj调用函数是一定要确保它可以做出反应
if([obk isKindOfClass:[NSString class]]){
//可以放心的对obj调用NSString方法了
}
}
NSDictionary *myDictionary = ...;
for(id key in myDictionary)
{
//do something with key here
id value = [myDictionary objectForKey:key];
//do something with value here
}
//注意不要在fast enumeration中对mutable的dictionary做任何增加删除等操作。
Property List(属性列表)
//NSArray、NSDictionary、NSString、NSNumber、NSDate、NSData(包含它们的Mutable版本)称为属性列表类(property list classes),当且仅当objects里只包含这些列的时候才叫做属性列表。
//例如:一个以NSString为元素的NSArray是属性列表,一个key和value都属于属性列表的dictionary才是属性列表
//方便于读取或写入
//[plist writeToFile:(NSString *)path atomically:(BOOL)];
NSUserDefaults
//用于轻量级存储的属性列表
//是一个在载入application的时候实用的NSDictionary
//不是一个完整的database,所以只储存类似user preferences的小东兴。
//通过方法standardUserDefaults来读写
[[NSUserDefaults standardUserDefaults] setArray:rvArray fprKey:@”RecentlyViewed”];
//类似还有:
-(void)detDouble:(double)aDouble forKey:(NSString *)key;
-(NSInteger)integerForKey:(NSString *)key; //NSInteger是32或64位整形变量
-(void)setObject:(id)obk forKey:(NSString *)key; //obj必须是一个属性列表
-(NSArray )arrayForKey:(NSString )key; //如果key对应的不是array会返回nil
//每次做出改变之后都需要synchronize来保存你的改变
[[NSUserDefaults standardUserDefaults] synchronize];