1 #import "AddressBook.h" 2 #import "Person.h" 3 /* 4 1.为什么下面使用可变数组的时候可以不用初始化直接定义就可以 5 2.为什么要用不可变数组接受返回值 6 3.self的用法,在方法里为什么不能代替_addressBook,而用self.addressBook却可以 7 4.什么时候用NSArray接收 ,什么时候又用不可变数组接收 8 */ 9 10 @implementation AddressBook 11 //重写初始化方法 12 -(instancetype)init 13 { 14 self = [super init]; 15 if (self) { 16 _addressbook = [NSMutableDictionary dictionary]; 17 } 18 return self; 19 }
1.我们重写init方法是因为如果用系统默认的init方法,在主函数里调用init的时候会调用父类的init,但是我们要为自己定义的实例变量进行一定的初始化操作,也就是说我们自己定义的类至少要有一个初始化方法,无论是自定义的还是重写系统初始化方法
1 if (aPerson.name.length == 0 || aPerson.phone.length == 0) { 2 NSLog(@"您所添加的联系人姓名和电话不能为空"); 3 return NO; 4 }else{ 5 6 if([[_addressbook allKeys] containsObject:aPerson.groupName]){ 7 NSMutableArray *parr = [_addressbook objectForKey:aPerson.groupName]; 8 for (Person *p in parr) { 9 if ([p.name isEqualToString:aPerson.name]) { 10 NSLog(@"联系人重复"); 11 return NO; 12 } 13 } 14 [parr addObject:aPerson]; 15 return YES; 16 } 17 NSMutableArray *grop = [NSMutableArray new]; 18 [grop addObject:aPerson]; 19 [_addressbook setObject:grop forKey:aPerson.groupName]; 20 21 } 22 23 return NO;
2.上边的代码中,可变数组parr 和 grop 代表了两种不同的操作方式,数组名存放的是地址空间,parr存放的是字典中键值对的地址空间,所以不需要初始化,而grop 没有指向任何地址空间,所以需要初始化一下
我们平时在赋值过程中一定要注意是复制了地址,还是重新开辟了空间复制了值,前者可以改变原来空间里的值,而后者则不能
时间: 2024-10-22 19:25:48