类型常量:使用类型常量代替#define
1. 普通常量
//.m #import "xxxxx.h" static const NSTimerInterval kAnimationDuration = 0.3; //放在.m文件的#import之后即可,常量名称以k开头。 @implemenation xxxxx @end
2. 公开常量
//注意不同类型的写法,最好以类名作为前缀。 //xxxxx.h extern NSString *const xxxxxStringConstant; extern const NSTimerInterval xxxxxAnimationDuration; //xxxxx.m NSString *const xxxxxStringConstant = @"VALUE"; const NSTimerInterval xxxxxAnimationDuration = 0.3;
枚举类型的声明:用NS_ENUM代替普通枚举,用NS_OPTIONS代替定义选项的枚举
1. NS_ENUM和普通枚举的写法
//声明一个EOCConnectionState枚举 typedef NS_ENUM(NSUInteger, EOCConnectionState) { EOCConnectionStateDisconnected, EOCConnectionStateConnecting, EOCConnectionStateConnected, }; //传统写法: enum EOCConnectionState : NSUInteger { EOCConnectionStateDisconnected, EOCConnectionStateConnecting, EOCConnectionStateConnected, }; typedef enum EOCConnectionState EOCConnectionState;
2. NS_OPTIONS和定义选项枚举的写法
//声明一个EOCPermittedDirection选项枚举 typedef NS_OPTIONS(NSUInteger, EOCPermittedDirection) { EOCPermittedDirectionUp, EOCPermittedDirectionDown, EOCPermittedDirectionLeft, EOCPermittedDirectionRight, }; //传统写法: enum EOCPermittedDirection: NSUInteger { EOCPermittedDirectionUp = 1 << 0, EOCPermittedDirectionDown = 1 << 1, EOCPermittedDirectionLeft = 1 << 2, EOCPermittedDirectionRight = 1 << 3, }; typedef enum EOCPermittedDirection EOCPermittedDirection;
属性特质:原子性、读写权限、内存管理语义、方法名
1. 原子性:
atomic或者不写,表示使用同步锁;
nonatomic,表示不使用同步锁。
2. 读写权限:
readwrite,同时拥有getter和setter方法;
readonly,只有getter方法。该属性由@synthesize实现,编译器才会自动生成相应的getter、setter。
3. 内存管理语义:
assign,对简单类型的赋值操作。
strong,强类型。weak,弱类型。
unsafe_unretained,与weak不同的是,当对象被销毁时,属性值不会自动被清空。
copy,与strong不同的是,设置方法不会保留新值,而是将其拷贝。NSString*的新值可能被指定为NSMutableString的实例,为防止此属性值被修改,新值可能为mutable的对象的,都应该copy。
//若声明copy特质的属性 @property (copy) NSString *title; //在实现自定义的初始化方法时,也要遵从copy _title = [aNSString copy]; /* 注意:其他的特质也是同样道理。 */
4. 方法名:
getter=<name>,指定getter方法名,如果属性是Boolean型,可以指定is前缀,如: @property (noatomic, getter=isOn) BOOL on;
setter=<name>,指定setter方法名,不常用。
-
时间: 2024-10-10 06:08:24