1, set内存管理
-> 值类型的属性(实例变量)
- (void)setAge:(int)age {
_age = age;
}
-> 引用类型
- (void)setCar:(Car *)car {
if (_car == car) return;
[_car release]; // 引用计数 -1
_car = [car retain];
}
2, @property 完整的语法
-> MRC
原子性: nonatomic, atomic
读写性: readwrite, readonly
set: 值类型: assign
引用类型: retain
字符串: copy
-> ARC
原子性: nonatomic, atomic
读写性: readwrite, readonly
set: 值类型: assign
引用类型: strong, weak
字符串: copy
3, @class
一般, 在 .h 文件中使用 @class, 在 .m 文件中使用 #import
4, NSString 的内存管理
5, 自动释放池 (MRC)
-> 它其实就是一个 "数组"
-> 入池的对象, 就是加入到了 "数组" 中
-> 池结束的时候, 会自动的为 "数组" 中的对象发送 release 消息
注意: 必须在 释放池的语法范围内 入池才有效
@autoreleasepool {
Person *p = [[Person alloc] init];
[p autorelease]; // 入池
// [p addIntoPool];
}
6, ARC 与 MRC 区别
本质是一样的, 最后生成的代码是一样的
MRC 是手动的 添加 引用计数 +1 -1 的代码, 或入池的代码 等
ARC 是编译器自动的 添加 引用计数 +1 -1 的代码, 或入池的代码 等
7, ARC 基本原理(强指针)
8, 在 ARC 中兼容 MRC
将 MRC 转换为 ARC
9, Category 的基本概念
@interface 类名 (分类名)
@end
@implementation 类名 (分类名)
@end
功能:
1> 扩展现有类的方法
2> 将类的定义进行分组
@interface NSString : NSObject
....
@end
....
@interface NSString (numeric)
- (BOOL)isNum;
@end
....
// 换了一种编译顺序