(一)结构:
AppKit UIKit
Foundation(OC,NS*)
core Foundation(C,CF*)
(二)数据类型:
1.NSRange:
1.1定义:
typedef struct _NSRange
{
unsigned int location;
unsigned int length;
}NSRange;
1.2用途:
表示事物的范围。location从1开始数,length表示个数。a.字符串里的字符范围。b.数组里的元素范围。
1.3:初始化:
a.NSRange range = {17,4};
b.NSRange range;
range.location = 17;
range.length = 4;
c.快捷方式:NSRange range = NSMakeRange(17,4);
2.几何数据类型:以CG开头,来自Core Graphics(C语言实现,用于2d渲染)
struct CGPoint
{
float x;
float y;
} ;//笛卡尔平面中的一个坐标,快捷方式CGPointMake()
struct CGSize
{
float width;
float height;
};//存储长宽,快捷方式CGSizeMake()
struct CGRect
{
CGPoint origin;//起始点
CGSize size;//长宽
};//矩形,快捷方式CGRectMake()
3.字符串
3.1 创建字符串:+ (id) stringWithFormat:(NSString*)format,...;//类方法,工厂方法
NSString* height = [NSString stringWithFormat:@"Your height is %d feet,%d inches",5,11];
3.2长度:-(NSUInteger)length;//实例方法
NSUInteger length = [height length];
3.3字符串比较
//是否相等
- (BOOL)isEqualToString:(NSString*)aString;
不能用==,因为==只是判断指针值,并不判断指针指向的内容是否相同。
//大小比较
- (NSComparisonResult) compare:(NSString*)aString;
enum
{
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
//不区分大小写的比较
- (NSComparisonResult) compare: (NSString*)aString
options: (NSComparisonOptions) mask;
掩码如下,可以位运算
NSCaseInsentiveSearch:不区分大小写字符
NSLiteralSearch:进行完全比较,区分大小写
NSNumericSearch:比较字符串的的字符个数,而不是字符串值。
//字符串内是否还包括别的字符串
- (BOOL) hasPrefix: (NSString*) aString;//是否以某个字符串开头
- (BOOL) hasSuffix: (NSString*) aString;//是否以某个字符串结尾
- (NSRange) rangeOfString: (NSString*)aString;//是否包含某个字符串。如果没有找到,range.location=NSNotFound
//可变性
NSString 一旦创建,便不能改变。你只能进行比较,查找等,但是不能以删除字符或者添加字符等方式改变它。
NSMutableString,它继承自NSString,它是可变的。
+(id)stringWithCapacity:(NSUInteger)capacity;
示例如下:
NSMutableString* string = [NSMutableString stringWithCapacity: 42];
-(void)appendString: (NSString*)aString;//连接字符串 [string appendString: @"hello"];
-(void)appendFormat:(NSString*)format,...;//连接格式化字符串 [string appendFormat: @"human%d",10]
-(void)deleteCharactersInRange: (NSRange)aRange;//删除字符串中的字符。
4.集合:只能存储对象,不能存储基本类型数据如int,float和struct等
4.1 NSArray
NSArray是一个cocoa类,用来存储对象的有序列表。你可以在NSArray中放入任意类型的对象:NSString,Car,Shape,Tire,甚至是其它数组或者字典对象。
限制:NSArray职能存储object-c对象而不能存储c对象(int,float,struct等),同时你也不能在NSArray中存储nil
//创建NSArray
NSArray* array = [NSArray arrayWithObjects:@"one",@"two",nil];
NSArray* array2 = @[@"one",@"two"];
//对象个数
-(NSUInteger)count;
//获取特定索引处的对象
-(id)objectAtIndex:(NSUInteger)index;
array[index]
4.2可变数组NSMutableArray
//初始化:没有字面量初始化方法
+(id)arrayWithCapacity:(NSUInteger) numItems;
//添加
-(void)addObject:(id)anObject;//添加一个对象
-(void)removeObjectAtIndex:(NSUInteger)index;//删除特定索引处的对象, 索引从0开始
4.2枚举
NSEnumerator* enumerator = [array objectEnumerator];
while(id thingie = [enumerator nextObject])
{
NSLog(@"I found %@",thingie);
}
//注
1.nextObjext为nil时会跳出循环,这就是为什么不能在数组里存储nil的原因,因为不知道nil是结束标示还是数组元素。
2.在枚举的过程中不能添加或者删除对象来操作数组,因为会导致枚举器混乱
4.3 快速枚举
5. 字典
5.1 NSDictionary
//初始化:同样以nil作为结束
+(id)dictionaryWithObjectsAndKeys:(id)firstObject,...;
@{key:value,...}
eg:
Tire* t1 = [Tire new];
Tire* t2 = [Tire new];
Tire* t3 = [Tire new];
Tire* t4 = [Tire new];
NSDictionary* tires = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"first",t2,@"second",t3,@"third",t4,@"fourth"];
NSDictionary* tires = @{@"first",t1,@"second",t2,@"third",t3,@"fourth",t4};
//查找,如果找不到则返回nil
- (id) objectForKey: (id) akey;
tires[key];
5.2 NSMutableDictionary
//初始化:没有字面量初始化方法
+ (id)dictionary;
+ (id)dictionaryWithCapacity: (NSUInteger) numItems;
//增加,如果key已存在,那么值会被替换
- (void) setObject:(id)anObject forKey:(id)aKey;
//删除
-(void) removeObjectForKey:(id)aKey
6.其它数值
因为NSArray和NSDictionary职能存储对象,而不能直接存储任何基本类型的数据。所以如果想用NSArray和NSDictionary处理基本类型的数据,可以把基本类型封装成对象。
6.1 NSNumber
//初始化 获取基本类型值
+ (NSNumber* )numberWithChar: (char)value; -(char) charValue;
+ (NSNumber* )numberWithInt: (int)value; -(int) intValue;
+ (NSNumber* )numberWithFloat: (float)value; -(float) floatValue;
+ (NSNumber* )numberWithBool: (BOOL)value; -(BOOL) boolValue;
-(NSString*)stringValue;
...
NSNumber* number;
number = @'X';//字符型
number = @12345;//整型
number = @YES;//布尔型
6.2 NSValue,NSNumber的基类
//初始化 获取值
+(NSValue*) valueWithBytes:(const void*)value objCType: (const char*)type;//参数为要封装的数据的地址 -(void)getValue:(void*)buffer;
6.3 NSNull ,可以放在集合里
//初始化
+ (NSNull*)null
eg:
jack家里没有电话:
id homePhone = [contact setObject:[NSNull null] forKey: @"home phone"];
查找jack电话:
if(homePhone == [NSNull null])
{
//没有电话的行为定义
}