图片总结:
属性
@property声明属性,做了三件事
.h: 声明了getter和setter方法;
.h: 声明了实例变量(默认:下划线+属性名);
.m: 实现了getter和setter方法。
特性
1.Atomicity(原子性):
是否给setter和getter加锁,是否保证setter或者getter的每次访问是完整性的
atomic(默认值)
一定程度上可以保证线程安全,有线程在访问setter,其他线程只能等待完成后才能访问。
nonatomic
不保证你获得的是有效值
2.Access(存取特性):
readwrite,就是告诉编译器,同时生成getter和setter。如果是readonly,只生成getter。
readwrite:「读写」
readonly: 「只读」
3.特质修饰(内存管理特性)(管理对象的生命周期的)
strong(默认值)
表明你需要引用(持有)这个对象,负责保持这个对象的生命周期。
基本数据类型(非对象类型,如int, float, BOOL),默认值并不是strong,strong只能用于对象类型。
weak
跟strong相反,属性所指的对象销毁时,属性值也会清空,设置为nil。
会给你一个引用,指向对象。但是不会主张所有权。也不会增加retain count。
在delegate patterns中常用weak解决strong reference cycles(以前叫retain cycles)问题。
copy
会在赋值前,复制一个对象,指向新对象
NSString,NSArray,NSDictonary,推荐使用copy属性
NSMubtableString,NSMutableArray, NSMutableDictonary属性则使用strong属性。
assign
针对基本数据类型赋值操作。
4.Nullability
nullable:对象「可为空」
nonnull:对象「不可为空」
null_unspecified:「未指定」
null_resettable:调用setter去reset属性时,可以传入nil,但是getter返回值,不为空。
数据类型
基本数据类型:整型, 字符型, 浮点型 (float 和 double), 枚举型;
1.整型
① 四种整型 :
short int : 短整型, 占16位, mac 上占 2 字节, ios 上占 2 字节, 范围 -32768(-2^15) ~ 32767(2^15 - 1), 3万;
int : 整型, 占32位, mac 上占 4 字节, ios 上占 4 字节, 范围 -2147483648(-2^31) ~ 2147483647(2^31 - 1), 21亿;
long int : 长整型, 占64位, mac 上占 8 字节, ios 上占 4 字节, (-2^63) ~ (2^63 - 1), 922亿亿;
long long : 占64位, mac 上占 8 字节, ios 上占 8 字节;
② 进制:
八进制 十六进制赋值 : 八进制由 "0" 开头, 十六进制由 "0x" 或者 "0X" 开头;
③ 无符号整型:
无符号整型 第一位 不是符号位, 范围比原来要大,例 unsigned short int 范围是 0到6万
-- %d : 十进制整数, 正数无符号, 负数有 "-" 符号;
-- %o : 八进制无符号整数, 没有 0 前缀;
-- %x : 十六进制无符号整数, 没有 0x 前缀;
-- %u : 十进制无符号整数;
2. 字符型
单个字符表示 : 使用 '' 将单个字符引起来, 便是字符常量, 如 'a', 'b' 等;
转义字符表示 : 使用转义符号 \ 来指定字符, 如 '\n' 等;
字符占用空间大小 : 每个字符占用一个字节, 因此 Object-C 不支持中文字符, 因为中文字符都是占 2 ~ 3 个字节;
-- %c : 单个字符输出;
-- %s : 输出字符串;
3. 浮点型
float : 占 4 字节;
double : 占 8 字节;
long double : 占 16 字节;
CGFloat :对于需要兼容64位机器的程序而言,需要用CGFloat,当然从长远角度考虑还是推荐尽量使用CGFloat。尽管在32位上相比float增加了一些memory footprint的消耗
(Object-C浮点数 : 不区分 double 与 float, 一个浮点数 3.8 可以赋值给两种类型的变量)
-- %f : 以小数形式输出浮点数, 默认 6 位小数;
-- %e : 以指数形式输出浮点数, 默认 6 位小数;
-- %g : 自动选择 %e 或者 %f 各式;
4.枚举类型
① 定义普通枚举:
定义方式 : 格式 enum enum_name {elem1, elem2, elem3 ...};
示例 : enum day{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
定义枚举变量 : 格式 enum enum_name var1, var2;
示例 : enum day today, tomorrow, 注意 today tomorrow 两个变量的取值只能是 day 枚举中定义的值;
枚举变量赋值 : 格式 variable = elm1 ;
示例 : today = Sunday; tomorrow = Friday;
② 定义匿名枚举:
匿名枚举格式 : enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} today, tomorrow ;
说明 : 两个枚举变量 today 和 tomorrow 只能取值 enum 中得枚举值;
③ 枚举值简介
枚举值常量 : 在 {} 中得是枚举常量 或者 枚举元素, 该元素不是变量, 不能对齐进行赋值, 枚举的值按照定义的顺序 0, 1, 2, 3 以此类推;
枚举值本质 : 枚举值属于无符号整数, 可以使用 %u 占位符打印出来, 其值也能进行大小比较, 和四则运算;
枚举初值 : 枚举值可以在定义的时候赋予一个初值;
-- %p : 输出十六进制形式的指针地址;
-- %@ : 输出 Object-C 对象;
其他
1.布尔型数据
BOOL 类型值 : 该类型至右两个值 YES 和 NO ;
BOOL 类型本质 : 该类型本质是 signed char, YES 是 1, NO 是 0, 在处理的时候 YES 会被当成真处理, NO 会被当成假处理;
2.nil和Nil
nil相当于Java中的null,表示一个对象,这个对象的指针指向空。Nil是定义一个指向空的类而不是对象。
3.id类型
可以存放任何数据类型的对象,类似Java中的Object类,其被定义为指向对象的指针(本身就是指针了),故定义比如id instance = nil;
id类型是多态和动态绑定的基础。
Object C 数字、字符串、集合、字典、NSURL、NSDate
网友评论