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。
NSNumber
NSValue
NSNull