1-7条
//Objective-C消息型语言,运行时所应该执行的代码室友运行期环境来决定的,使用函数调用的语言则是由编译器决定 对象所占内存总是分配在“堆”,不会分配在“栈”。不能在“栈”中分配OC对象 指向同一地址不拷贝对象,两个变量就会同时指向此对象(内存的值也一样 指向此对象内存地址) Objective-C在运行时才会检查对象类型,接受到消息后,由运行期环境决定执行哪种代码
//堆中的内存需要直接管理(MRC,ARC)栈上的内存在栈帧弹出时候自动清理,在Objective-C中,有的时候可能碰到不是Objective-C对象 比如CGRect frame(CGRect是结构体)一般保存的都是非对象类型
//在编译一个使用某个类的文时,不需要知道类的全部细节只需要由个类名就行,就用@class 还可防止循环引用 代理最好分出文件
//字面量语法方便操作,语法简单 @{} @[] @“” @123; 对象必须是foundation框架才可以,自定义这些类的子类不可这样用(一般也不会这样做)字面量的对象都是不可变的,如果想要可变版本需要copy一份
//static const 要比 #define 更好 用这种方式定义的常亮带有类型信息 发送通知的时候定义
extern NSString * const YCNotification;
NSString *const YCNotification = @"wuqing";
常量名字最好以类名为前缀 YCNotification 此值会放在全局符号表 可以再定义该常亮的编译器之外使用 其他常亮也是如此 如果要把某常量对外公布 都可以这么搞
//用枚举表示状态,选项,状态吗, OC中枚举可以用位运算
typedef enum : NSUInteger {
Name = 1,
Age,
Height,
} Preson;
typedef enum : NSUInteger {
eat = 0,
work = 1 << 0,
seeMovie = 1 << 1,
} PresonDoSomething;
//理解属性@property
原子性: 同步锁 读写权限:
读写:readwrite 拥有getter和setter方法,只读:仅拥有getter方法 可以用这个特质把某个属性公开成只读,然后在class-continuation中重新定义成读写属性
内存管理语义:assign 纯量类型 int nsinterger cgfloat等
Strong 拥有关系 强指针
Weak 非拥有关系 弱指针(不保留新值,也不释放旧值 所指对象呗摧毁属性被清空)
Copy 与strong类似 但是这种设置方法不保留新值,而是拷贝一份,保护原有的封装性为了在对象不会在不知情的情况下遭到更改
Unsafe_unretained 和assign相同 但是适用于 对象类型 也表达一种非拥有关系 当目标对象被摧毁,属性值不会自动清空 与weak区别在这里
在对象内部尽量访问实例变量 懒加载等