美文网首页
objc-zen-book

objc-zen-book

作者: iLeooooo | 来源:发表于2018-03-06 14:27 被阅读5次

懒加载

一般我们会在初始化方法中, 把成员变量都初始化出来, 但是有些成员变量比较耗资源, 如:NSDateFormatter, 而且不一定什么时候才会用到,
因此可以使用懒加载策略: 重写getter方法:

- (NSDateFormatter *)dateFormatter{
    if (!_dateFormateer)
    {
    // 初始化变量
    }
    return _dateFormateer;
}

代码块

代码块如果在闭合的圆括号内的话, 会返回最后语句的值:

NSURL *url = ({
    NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseURLString, endpoint];
    [NSURL URLWithString:urlString];
});

这个特性可以使变量的作用域只在代码块中, 从而减少对其它作用域的污染, 从而缓解编程的世界性难题之一--变量命名

pragma 消除警告

#pragma clang diagnostic push // 准备压入一个警告消除标记
#pragma clang diagnostic ignored "-Warc-performSelector-leaks" // 警告消除标记

[myObj performSelector:mySelector withObject:name]; // 需要消除警告的代码

#pragma clang diagnostic pop // 弹出这个警告消除标记, 以免在别的地方也不警告了

除此之外 还有:
#pragma clang diagnostic ignored "-Wdeprecated-declarations" // 方法弃用警告
#pragma clang diagnostic ignored "-Wincompatible-pointer-types" // 不兼容指针警告
#pragma clang diagnostic ignored "-Wunused-function" // 没有使用的函数
一般命名规则是 "-W警告提示名"
如果一个变量未使用, 但是你有别的意图, 想要消除警告可以:
#pragma unused (variable)

Block

定义包含有block的接口时, 提供一个单独的block比分别提供成功和失败block要好些, 因为很多情况下成功和失败都需要执行一部分代码.
成功的数据对象和失败的错误对象都在参数中, 因此必须保证:

  1. 数据对象和失败对象其中之一为非空, 另一则为空.
  2. 在检查时, 我们一般会检查数据对象是否为空, 一来我们更关心数据, 二来, 苹果提供的一些同步接口在成功的情况下也会像NSError中写入一些垃圾值.

Block作为属性要使用copy的内存管理方式, 确保在栈帧返回时block不会被释放掉而得不到执行

weakself 和 strongself的选择: 如果实例持有了这个block, 但是这个block又要使用self的方法, 则需要对self进行weak, 否则会造成循环引用。

慢慢来,一步一个巴掌印~~~

转载

相关文章

网友评论

      本文标题:objc-zen-book

      本文链接:https://www.haomeiwen.com/subject/yknlfftx.html