ios读书笔记

ios开发尽量少用宏# define,多使用类型变量
比如
#define animation_duration 0.3
static conts NStimrInterval KanimationDuration = 0.3;
这样写定义的常量包含类型信息其更好的清楚描述了常量的含义,
并且若常量局限与编译单元,就是实现文件.m之内,则需要在字母前加上K,若常量在类之外可以见,则通常以类名为前缀,这样更好清楚的理解,
 static conts NStimrInterval KanimationDuration = 0.3;//不需要别的类知道的变量
// 需要暴露在外面,
extern NSString *const returnSalesDetailVCStopTimerNotification;
 NSString *const returnSalesDetailVCStopTimerNotification = @"returnSalesDetailVCStopTimerNotification";
定义枚举类型的时候尽量使用这样的方式,这种方式也可以用在switch语句中,但是在switch语句中要去掉default分支,切记
typedef NS_ENUM(NSInteger,OrderViewControllerSectionType) {
OrderViewControllerSectionTypeOrderInfo = 0,//订单信息
OrderViewControllerSectionTypeOdersTotalPriceInfo,
OrderViewControllerSectionTypeReceiverInfo, //收件人信息
OrderViewControllerSectionTypeMax,//
};
并且枚举名称一定要通俗易懂;
####块的使用
块和函数相似,只不过是直接定了在另一个函数里的,和定义它的那个函数共享一个范围内的东西,块用 ^ 符号来表示,后面跟一堆花括号,括号里面是块的实现代码,
例如
^{
    //block implementaiton here
}
块其实就是个值,与int float或者对象一样,也可以把块赋给变量,可以像使用其他变量那样使用它,块类型语法和函数指针近似,比如这个块没有参数,也没有返回值
void (^someBlock)() = ^{
    //block here;
}
这段代码定一个了一个名为someBlock 的变量,由于变量名写在中间,看着有点怪,但是理解了就懂了,
return_type (^block_name) (parameters)
下面这种写法所以定义的块,返回int值,并且接受2int 参数
int (^addBlock)(int a,int b)=^(int a,int b){
return a+b;
}
定义好块之后,就可以像函数那样使用了,比如
int add= addBlock(2,5);//add=7
使用块语法需要注意的:
写法问题
因为块语法笔记难读,所以经常给块起个别名,把块的类型隐藏在后面,这样方便阅读,例如
typedef int (^EOCSomeBlock)(BOOL flag,int value);
声明变量时,要把名称放在类型中间,并且在前面加上^,这样读起来方便多了,类似这样
EOCSomeBlock block = ^(BOOl flag,int,value){
//implementation
};
这样读起来顺畅多了,变量类型在左边,变量名称在右边,
通过这项特性,可以把API 做的更简单,比如
-(void)startWithCompletionHandler:(void(^)(NSData *data,NSError *error))completion;
这样定义参数所用的块语法类型,如果能把签名中的参数类型写成一个词,读起来也方便多,所以给参数类型起个别名,然后使用
typedef void(^EOCCompletionHandler)(NSData *data,NSError *error);
-(void)startWithCompletionHandler:(EOCCompletionHandler)completion;
这样读取更简单了,不论读取,还是需要再添加一个参数都方便多了,
用Hnadler块降低代码分散程度
有时候我们需要异步执行任务,在异步执行完成后,需要通知相关代码,实现方法常见的就是委托delegate,比如要写一个从url获取数据,使用委托实现应该是这样的
@protocol EOCNetworkFecherDelefgate <NSObject>
-(void)networkFetcher:(EOCNetworkFetcher*)networkFetcherDidFinishWithData:(NSData*)data;
@end
@property (nonatomic,weak)id<EOCNetworkFecherDelefgate>delegate;
其余方法略,在其他类需要这样调用
-(void)fetchFooData{
NSURL *url=[NSUrl alloc]initwithURl@"www.xxxx.com";
 EOCNetworkFecher *fetcher=[EOCNetworkFecher alloc]initWitchUrl:url];
 fetcher.delegate=self;
 [fetcher start];  
  }
  -(void)networkFetcher:(EOCNetworkFetcher*)networkFetcherDidFinishWithData:(NSData*)data{
  _Fdata=data
  };
这样写没错误,就是麻烦的很,所以我们使用块实现如下
typedef void(^EOCNetworkFetcherCompletionHander)(NSData *data,NSerror *error);
-(void)startWithCompletionHander:(EOCNetworkFetcherCompletionHander)completion;
调用的时候如下
NSURL *url=[NSUrl alloc]initwithURl@"www.xxxx.com";
EOCNetworkFecher *fetcher=[EOCNetworkFecher alloc]initWitchUrl:url];
[fetcher startWithCompletionHander:^(NSData *data,NSError *error){
if(error){
//handle failure
}else{
//handle succeess
}
}];  
这样写方便简洁,参数更容易传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值