一.数据类型
Obejective-C是C语言的高级抽象,它支持三种数据类型:
基本数据类型:int,float,double,char,enum等。
对象数据类型:类所声明的指针类型。
id类型:它是一个指向对象的指针(双重指针)。
二.集合类型
集合(NSSet/NSMutableSet)与哈希表(NSHashtable)
集合和哈希表的数据在内存中是散列分布的,而且不存在两个相同的元素(实现对象去重),依赖于哈希散列算法实现。它们的操作单元是对象元素,使用它们可以保证对象的唯一性,同时NSMutableSet
可以进行集合操作(交差并)。
NSMutableSet *set = [[NSMutableSet alloc]init];
Line *line1 = [[Line alloc]init];
Line *line2 = [[Line alloc]init];
line1.x = 2.0;
line2.x = 2.0;
[set addObject:line1];
[set addObject:line2];
NSLog(@"%d",[set count]);
输出值为2
可通过重写Line类的-(NSUInteger)hash以及-(BOOL)isEqual:(id)anObject两个方法来实现类内容唯一性判断
NSHashTable
是NSSet
的高级版本,和NSSet
/NSMutableSet
不同的是NSHashTable
具有下面这些特性:
NSSet
/NSMutableSet
持有成员的强引用,通过hash
和isEqual:
方法来检测成员的散列值和相等性。NSHashTable
是可变的,没有不可变的对应版本。NSHashTable
可以持有成员的弱引用。NSHashTable
可以在加入成员时进行copy
操作。NSHashTable
可以存储任意的指针,通过指针来进行相等性和散列检查。
NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn];
[hashTable addObject:@"foo"];
[hashTable addObject:@"bar"];
[hashTable addObject:@43];
[hashTable removeObject:@"bar"];
NSLog(@"Members: %@", [hashTable allObjects]);
词典(NSDictionary/NSMutableDictionary)与映射表(NSMapTable)
词典和映射表是一种键值匹配容器(Key-Value),它们的键值是唯一的,
NSMapTable
是NSDictionary
的高级版本,和NSDictionary
/NSMutableDictionary
不同的是NSMapTable
具有下面这些特性:
NSDictionary
/NSMutableDictionary
对键进行拷贝,对值持有强引用。NSMapTable
是可变的,没有不可变的对应版本。NSMapTable
可以持有键和值的弱引用,当键或者值当中的一个被释放时,整个这一项就会被移除掉。NSMapTable
可以在加入成员时进行copy
操作。NSMapTable
可以存储任意的指针,通过指针来进行相等性和散列检查。