1. 你给我解析清楚,都有了CALayer了,为什么还要UIView??
分层设计,各司其职,策略和机制分离,calayer 只负责绘图,其他不干,UIView 处理交互,变动较快。
2.ios 中的 “位移枚举” :
先看c 语言的枚举>
typedef enum{
DirectionTypeUp,
DirectionTypeLeft,
DirectionTypeDown,
DirectionTypeRight
} DirectionType;
ios 的枚举:
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
UIViewAnimationTransitionNone,//默认从0开始
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
};
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, //表示1 :1左移0位
UIViewAutoresizingFlexibleWidth = 1 << 1, // 表示2 :1左移1位
UIViewAutoresizingFlexibleRightMargin = 1 << 2, // 表示4
UIViewAutoresizingFlexibleTopMargin = 1 << 3, // 表示8
UIViewAutoresizingFlexibleHeight = 1 << 4, //表示16
UIViewAutoresizingFlexibleBottomMargin = 1 << 5 //表示32
};
从c语言开始沿用过来的枚举,保留至今。iOS6和Mac OS 10.8以后引入了两个宏NS_OPTIONS 和NS_ENUM来定义枚举类型,本质上这个两个宏没有区别,只是从字面上区分用途。
NS_OPTIONS :用来定义 位移枚举。
NS_ENUM: 用来定义 普通枚举
3. 一个名词:方法签名
方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。
注意,方法签名不包括方法的返回类型。不包括返回值和访问修饰符
注意:重载和重写。重写要求方法签名必须相同,返回值类型也相同,重载只要求方法签名相同;重写是覆盖,最终还是一个方法,调用的是子类的方法,重载是方法的扩展,是多个方法;@override 关键字可以让编译器自动检查是否重载的正确
4.@dynamic关键字和@synthesize关键字是用来做什么的
@synthesize 声明编译器需要自动合成属性的存取方法
该关键字产生了两个影响,自动生成一个下划线开头的实例变量,另外自动生成了存取方法
@dynamic 用来标明不需要在编译期去关心存取方法是否存在,而后会提供
xcode 在迭代过程中已经默认合成了存取方法,@synthesize 不需要手动添加
另外一个文章可以帮助理解