一.基本数据类型

Objective-C是C语言的高级扩展,它的基本数据类型分为三种:

基本数据类型:int,float,doble,char,enum等。

对象数据类型:类所声明的指针类型。

id类型:指向元类的指针(指针的指针)。

二.集合类型

数组(NSArray/NSMutableArray)

数组是一种元素在内存中按序分布的数据结构,可通过下标来访问元素。同时NSArray还提供多种查找元素的方式。

NSArray * a1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];
NSArray * a2 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
NSArray * a3 = [[NSArray alloc] initWithObjects:a1,a2, nil];

NSLog(@"a3 %@",a3);

集合(NSSet/NSMutableSet)与哈希表(NSHashTable)

集合是一种元素在内存中无序散列分布的数据结构(基于哈希散列算法实现),在集合内的元素是唯一的(对象去重)。

NSMutableSet *set=[[NSMutableSet alloc]init];  
Line *line1=[[Line alloc]init];
Line *line2=[[Line alloc]init];
line1.x1=2.0;
line2.x1=2.0;
[set addObject:line1];
[set addObject:line2];
NSLog(@"%d",[set count]); 输出值为2
可通过重写Line类的-(NSUInteger)hash以及-(BOOL)isEqual:(id)anObject方法来实现自定义类内容的唯一性。
而NSString已经实现对内容唯一性的判断

NSHashTableNSSet的高级版本,和NSSet/NSMutableSet不同的是NSHashTable具有下面这些特性:

  • NSSet/NSMutableSet持有成员的强引用,通过hashisEqual:方法来检测成员的散列值和相等性。
  • NSHashTable是可变的,没有不可变的对应版本。
  • NSHashTable可以持有成员的弱引用。
  • NSHashTable可以在加入成员时进行copy操作。
  • NSHashTable可以存储任意的指针,通过指针来进行相等性和散列检查。
NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn];
[hashTable addObject:@"foo"];
[hashTable addObject:@"bar"];
[hashTable addObject:@42];
[hashTable removeObject:@"bar"];
NSLog(@"Members: %@", [hashTable allObjects]);

词典(NSDictionary/NSMutableDictionary)与映射表(NSMapTable)

词典是一种键值匹配(Key-Value)的数据结构,它的键值是唯一的。

NSMapTableNSDictionary的高级版本,和NSDictionary/NSMutableDictionary不同的是NSMapTable具有下面这些特性:

  • NSDictionary/NSMutableDictionary对键进行拷贝,对值持有强引用。
  • NSMapTable是可变的,没有不可变的对应版本。
  • NSMapTable可以持有键和值的弱引用,当键或者值当中的一个被释放时,整个这一项就会被移除掉。
  • NSMapTable可以在加入成员时进行copy操作。
  • NSMapTable可以存储任意的指针,通过指针来进行相等性和散列检查。
id delegate = ...;
NSMapTable *mapTable = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory
                                             valueOptions:NSMapTableWeakMemory];
[mapTable setObject:delegate forKey:@"foo"];
NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);

results matching ""

    No results matching ""