NSObject ps:类祖宗
@public 成员变量是公共的-类外可访问的成员
@private 私有的-仅类内可访问的成员(仅自己)
@protected 受保护的,类内成员和子类成员可以访问,父类不能访问
@protected 是默认的访问修饰符
@property 类的声明 写在.h文件 (用了属性的话,实例变量默认为私有"private",子类访问父类的成员变量时有两种办法:一种是[self(super) 属性名], 第二种是在父类中使用"{" "}"声明成员变量).
@synthesize 类的实现 写在.m文件
类的命名规范:类名首字母要大写,方法名首字母小写,但方法名中的每个单词首字母要大写,以提高程序的可读性
"-" 方法表明了该方法是实例方法, "+" 方法表明了该方法是类方法
对象:创建对象分两步:分配内存空间和初始化(实质上是需要做三件事:对象的声明,对象分配内存空间和初始化三部分).
分配内存空间:根据类中声明的实例变量为对象分配内存,并返回首地址(alloc,是开辟空间的唯一方法,也可以用"new",但是new的本质上也是用了"alloc")
初始化:为对象的实例变量设置初值
!!! 有冒号一定要有参数(冒号就是参数的标志)
!!! 方法属于类(只有某一个类可以进行)
!!! 函数不属于任意类,可以随意调用
alloc在堆区开辟内存空间,根据类开辟适合大小的内存空间.所开辟出来的内存空间的每一个字节都是清零的,然后将首地址作为返回值,以供外界访问.
类 就是类型
创建类的目的是为了 用类区创建对象
在oc中,对象时存放在堆区的,我们只能间接(指针)访问对象
!!!oc中,没有多继承,只允许单继承.只要定义了一个新的子类,该类会继承父亲类中除了@private 实例变量之外的全部内容.
子类能直接继承父类的方法,还可以重写父类的方法(子类自己实现). ps:继承也具有传递性
继承只可以单向继承
类方法使用"类名"调用
实例方法使用"对象"调用
初始化方法名一般以"init"开头,初始化方法可以在对象创建的时候给实例变量赋初值,初始化方法的返回值只能是"id"或"本类"对象,"不能是void"
属性提供了一个默认的设置器(setter)和访问器(getter)的实现.
设置器与访问器提供了一个外界操作类的内部通道,因为类的属性一般是私有的.
ps:oc是一门面向对象的语言,将属性设置为 "@private"体现了其封装的特性
数组里面只能放对象,不能放基本类型数据
数组存的是什么数据,取出来的也是什么类型的数据.(取的时候的类型.)
属性的设置有三个方面:
一:读写控制
二:原子性
三:语义设置
属性也可以设置自己的属性,在"@property"后会有一些可选属性(在圆括号内).
一般我们设置"非原子性(nonatomic)"不保证多线程安全,高效
MRC(提示:输入auto):"assign","retain","copy"
setter(有参无返回值)语义属性:
"assign":直接赋值 适用于基本类型(不带"*"的)
"retain":赋值时做内存优化 适用于对象类型 (一般修饰对象)
"copy":复制一个文本, 适用于特殊类型的对象
ARC(系统默认):"assin","weak","strong","copy"
getter(有返回值无参)语义属性:
"readwrite":可读写(既有设置器也有访问器)默认
"readonly":只读(只有访问器没有设置器)
"getter" = 方法名 指定访问器的方法名
"setter" = 方法名 指定设置器的方法名
如果属性是BOOL类型时,一般会给getter改名字,iOS一般不会给setter方法改名字,即使是BOOL类型(ps:其他类型基本不改)
oc中引入了点语法,使用了属性,我们就可以使用这个语法.(修饰属性)
封装:一种把实现细节隐藏起来的机制. 好处:使用更加简单,变量更加安全,可以隐藏内部实现细节,开发速度加快
description 自己可以决定自己要打印的东西,怎么写的就怎么打
注意:字面量创建的数组是 不可变的 ,通过"mutableCopy"能获取一个可变的数组
字面量会产生不可变的字典 需要使用 mutableCopy解决问题
NSMutableDictionary *dictionary02 = [@{@"name":@"张三",@"sex":@"男",@"age":@20} mutableCopy];
遍历字典
1.先获取所有的key
NSArray *allkeys = [mDictionary allKeys];
for (int i = 0; i < allkeys.count; i++) {
NSLog(@"%@----%@",allkeys[i],mDictionary[allkeys[i]]);
}
集合:
1.集合 元素不能重复
2.集合是无序的
3.取元素的时候是伪随机
ps: 字符串,数组,字典 数组和字典的使用频率基本一样,集合相反很少用
数组只能存放对象
数组是有序的容器(下标)下标必须从零开始
存的时候什么东西,取的时候就是什么
Foundation框架中,数组是有序的对象的集合.数组中的成员不必要数据类型一致,但是,成员必须是对象
可变数组中,增加的对象不能是"nil"
数组不可变指的是数组元素不可变
"description" 自我描述
"NSArray" , "NSDictionary" , "NSSet"只能储存对象,而不能直接储存任何基本数据类型.
字典使用过程中的注意事项:
1.字典中健值对,键必须是唯一的,不能相同,但值可以相同,即一个值可以通过不同的键索引到.
2.字典中key一般用"NSString"或者"NSNumber",而值可以是任一类型
3.值对象不能是"nil"