首页 > 其他 > 详细

Effective Objective-C手记

时间:2015-06-04 00:41:09      阅读:358      评论:0      收藏:0      [点我收藏+]

类型常量:使用类型常量代替#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方法名,不常用。

-

Effective Objective-C手记

原文:http://www.cnblogs.com/Bob-wei/p/4550532.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!