初始化,和赋值问题

 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

初始化,和赋值问题的相关文章

C语言指针的初始化和赋值

1.指针的初始化 指针初始化时,"="的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空).此时,*p仅仅是表示定义的是个指针变量,并没有间接取值的意思. 比如: int a = 25; int *ptr = &a; int b[10]; int *point = b; int *p = &b[0]; 假设:int  *p; *p = 7; 则编译器(vs2008)会提示The variable 'p'

c++类中对数据成员进行初始化和赋值的区别

在c++中定义一个类 ,对于构造函数 我们经常是这么写的: class test { public: test(int n_x , int n_y) { x = n_x; y = n_y; } private: int x , y; }; 这中写法虽然是合法的但比较草率 在构造函数 test(int n_x , int n_y)中 , 我们这样实际上不是对数据成员进行初始化 , 而是进行赋值. 正确的是初始化应该是这样的: class test { public: test() {} test(

GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。

官方教程:https://tour.go-zh.org/basics/12 变量在定义时没有明确的初始化时会赋值为 零值 . 零值是: 数值类型为 0 , 布尔类型为 false , 字符串为 "" (空字符串). 官方示例: package main import "fmt" func main() { //下面声明的变量没有被初始化,但是也具有值,就是默认的零值 var i int var f float64 var b bool var s string fm

动态申请 二维数组 以及初始化、 赋值

二维堆数组 可以利用指针的指针 例如 int ** array = new int[i][j]; 但是这样不能通过编译,因为堆数组不像基于栈数组那样工作,为其分配的内存是不连续的,因此堆数组分配足够的内存是不对的,应当先分配基于堆数组第一维数组下标分配一个连续的数组.该数组的每一个元素实际上是指向一个数组的指针. 一个测试小例: #include <iostream> #include <stdio.h> #include <cstring> using namespa

Do you really know what means initialization? “初始化 定义 赋值” 之间的联系与区别

"初始化 定义 赋值" 之间的联系与区别 本来很早之前就想写个blog,说说这三个家伙的区别和联系,三者之间各种联系,很难比较清楚的讲明白,感觉当时好像分析思路还不够"完整".今天遇到别人抛出来的一个问题.根本的问题是和初始化和赋值有关系,于是留下这个blog. #include <stdio.h> struct _ANIBMP { int FirstNumber; int Count; }ANIBMP; ANIBMP Swallow = {4,5};

c++总结之类型,对象的定义和声明,对象的初始化和赋值

一.对象的类型 对象的类型决定了对象占用内存空间的大小,和内存的布局,内存中可存储值的范围以及对该对象可以进行的操作,由于对象的类型决定可以对其执行的操作,因此const属性也可以看做对象类型的组成部分.类型又分为静态类型和动态类型,对于普通对象,静态类型和动态类型一般是一致的:对于指针和引用类型,静态类型和动态类型可以相同也可以不同,静态类型是指针和引用定义时声明的类型,而动态类型是指程序运行时实际绑定的类型.当静态类型和动态类型不同时,一般来说有两种情况:一是指涉到常量的指针和引用绑定了一个

C语言结构体数组内带字符数组初始化和赋值

1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char cmdPropt[24];}; BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,struct BleAndTspRmtCmd variable: 或者定义结构体数组变量,struct BleAndTspRmtCmd variable[]: 2.或者定义全局结构体变量,

extern关键字用法总结(顺带初始化和赋值的区别)

1.初始化和赋值的区别 初始化的含义是创建变量时赋予其一个初始值. 赋值是把对象的当前值擦除,用新值代替. 2.extern关键字的作用 C++的分离式编译机制可以让程序分为多个文件独立编译,如果要在多个文件中使用同一个变量,如果重复定义将发生程序错误,需要使用extern关键字来声明在另一个文件中已经定义过的变量.(如果为extern关键字声明的变量赋初值将抵消掉extern的作用,函数体内这样做将引发错误) 1 int a=0: //定义 2 3 extern int a: //声明 4 5

c++构造函数问题,初始化和赋值问题

默认构造函数(就是没有参数的构造函数) The Default ConstructorThe default constructor is the constructor used to create an object when you don't provide explicit initialization values. That is, it's the constructor used for declarations like this: Stock stock1;  // use

【Go语言】【5】变量初始化及赋值

在真正的编码过程中要使用一个变量,必须先声明然后才能使用,GO语言也不例外 1.声明变量 var postCode int    //声明一个整型变量postCode var phoneNum int    //声明一个整型变量phoneNum var name string     //声明一个字符串变量name var address string  //声明一个字符串变量address 接下来我们在main()方法直接打印一下各个值分别是多少: 从上面可以看到尽管我们只是声明了一个变量,但