macOS -> Cocoa -> Foundation, AppKit
iOS -> Cocoa Touch -> Foundation, UIKit(UIView, UIController)
Foundation框架的基础是CoreFoundation(C语言),如果函数或变量是以CF开头,就是CoreFoundation框架中的。
Foundation中一些有用的数据类型
范围: NSRange
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
表示相关事务的范围。有三种方式初始化:
- 直接给字段赋值:
NSRange range;
range.location = 12;
range.length = 5;
应用C语言的聚合结构赋值:
NSRange range = {17, 4}函数
NSMakeRange():
NSRange range3 = NSMakeRange(12, 5);
这个方法的好处是可以在任何能够使用函数的地方直接使用:
[anObject flarbulateWithRange: NSMakeRange(13, 15)];
几何数据类型
CG前缀,表示Core Graphics框架(C语言),用来进行2D渲染。
-
CGPoint表示坐标
struct CGPoint
{
float x;
float y;
}
-
CGSize表示大小,用来存储长度和宽度
struct CGSize
{
float width;
float height;
}
-
CGRect表示矩形,由坐标和大小复合而成
struct CGRect
{
CGPoint origin;
CGSize size;
}
- 对应创建函数:
CGPointMake(),CGSizeMake(),CGRectMake() - 集合数据类型是C语言结构体而不是类,是考虑性能的原因。
字符串
字符串类: NSString。
- 通过格式字符串和参数创建
NSString:
NSString *height;
height = [NSString stringWithFormat:@"%d, %d", 4, 3];
类方法: 以
+为起始符的。字符长度,实例方法
length:- (NSUInteger) length;-
字符串比较
-
(BOOL)isEqualToString:(NSString *)aString;,表示字符串内容是否相同,返回BooL;==判断字符串的指针是否相同,也就是是否是同一个事务。
NSString *thing1 = @"hello 5"; NSString *thing2 = [NSString stringWithFormat:@"hello %d", 5]; if ([thing1 isEqualToString:thing2]) { NSLog(@"两个字符串内容相同"); } if (thing1 == thing2) { NSLog(@"两个字符串是同一个对象"); }-
- (NSComparisonResult)compare:(NSNumber *)decimalNumber;,逐个比较字符串的每个字符,判断大小。返回一个枚举类型NSComparisonResult,三个枚举值分别表示左小于右,左等于右,左大于右。 -
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;,根据options的不同值有不同的功能。
-
字符串内是否还包含别的字符串
检测字符串是否以另一个字符开头或结尾:
- (BOOL)hasPrefix:(NSString *)str;
- (BOOL)hasSuffix:(NSString *)str;
一个字符串在另一个字符串内的返回:
- (NSRange)rangeOfString:(NSString *)searchString;
- 可变性
NSString是不可变的。也就是一旦被创建,就不能以删除字符或添加字符的方式改变它。NSMutableString是NSString的子类,可以改变。- 可通过类方法
stringWithCapacity:来创建,表示分配一块内存用于存储字符串,+ (NSMutableString *)stringWithCapacity:(NSUInteger)capacity;。
NSMutableString *string = [NSMutableString stringWithCapacity:1]; -
appendString:和appendFormat:添加字符串:
NSMutableString *string = [NSMutableString stringWithCapacity:50]; [string appendString:@"Hello there "]; [string appendFormat:@"human %d!", 39]; // Hello there human 39!-
deleteCharactersInRange:删除字符串,经常和rangeOfString:一起使用。
NSMutableString *friends = [NSMutableString stringWithCapacity:50]; [friends appendString:@"James BethLynn Jack Evan"]; NSRange jackRange = [friends rangeOfString:@"Jack"]; jackRange.length++; [friends deleteCharactersInRange:jackRange]; // James BethLynn Evan - 可通过类方法
集合
-
NSArray
两个限制:只能存储OC对象;不能存储nil。- 创建
类方法arrayWithObjects:(nil表示结束):
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
直接字面量:
NSArray *array2 = @[@"one", @"two", @"three"]; - 数组对象个数:
[array count]; - 按索引获取对象:
[array objectAtIndex:1]; array[1];- 字符串切分成数组,数组合并成字符串。
NSMutableString *string2 = @"oop:ack:bork:greeble:ponies"; NSArray *chunks = [string2 componentsSeparatedByString:@":"]; string2 = [chunks componentsJoinedByString:@":-)"]; // oop:-)ack:-)bork:-)greeble:-)ponies - 创建
-
NSMutableArray
NSArray包含的对象个数是不能变化的(包含的对象是可以变化的)。NSMutableArray是可以变化数目。- 创建:
+ (instancetype)arrayWithCapacity:(NSUInteger)numItems; - 末尾添加
- (void) addObject: (id) anObject; - 删除特定索引的对象
- (void)removeObjectAtIndex:(NSIndexSet *)index;
- 创建:
枚举:对数组进行遍历。
NSEnumerator
NSEnumerator *emumerator = [array objectEnumerator];
while (id thingie = [emumerator nextObject]) {
}
- 快速枚举
for (NSString *string in array) {
NSLog()
}
-
NSDictionary
同样也有对应的NSMutableDictionary。
// 创建 NSDictionary
Tire *t1 = [Tire new];
Tire *t2 = [Tire new];
Tire *t3 = [Tire new];
Tire *t4 = [Tire new];
NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:t1, @"front-left", t2, @"front-right", t3, @"back-left", t4, @"back-right", nil];
// NSDictionary *tires = @{@"front-left": t1, @"front-right": t2, @"back-left": t3,@"back-right": t4,};
// 访问特定key的对象
Tire *tire = [tires objectForKey:@"back-right"];
// Tire *tire = tires[@"back-right"];
// 创建NSMutableDictionary
NSMutableDictionary *tires_m = [NSMutableDictionary dictionaryWithCapacity:10];
// NSMutableDictionary *tires_m = [NSMutableDictionary dictionary];
// 为NSMutableDictionary添加元素
[tires_m setObject:t1 forKey:@"front-left"];
// 从NSMutableDictionary中删除元素
[tires_m removeObjectForKey:@"front-left"];
其他数据类型
NSArray和NSDictionary只能存储对象,不能直接存储任何基本类型的数据,如int、float、和struct。
NSNumberNSValueNSNull