美文网首页
从AFNetworking学习到的知识

从AFNetworking学习到的知识

作者: shiyueZ | 来源:发表于2018-10-08 15:48 被阅读0次
    • NSString * AFPercentEscapedStringFromString(NSString *string)

    在AFURLRequestSerialization.m文件里的方法,可以把url查询字符串中的一些特殊字符进行转换。具体实现可以去看源码,原来还有这种写法,涨姿势了!!!

    • rangeOfComposedCharacterSequencesForRange

    NSString是UTF-16编码的, 也就是16位的unichar字符的序列. 所以, 一般遍历其每一个字符的方法就是:

    for(int i = 0; i < str.length; i ++) {
          unichar ch = [str characterAtIndex:i]; 
    }
    

    但不是所有字符都是用唯一一个16位的unichar字符来表示的,比如有些表情符号是用2个16位unichar字符来表示的,所以用上面的遍历方法显然不能满足我们的要求,不过系统提供了两个方法来解决这个问题:
    分别是NSString的rangeOfComposedCharacterSequencesForRange:rangeOfComposedCharacterSequenceAtIndex:两个方法;它们是用于遍历每个字符的,而不是遍历每个unichar的了,因此我们遍历字符串可以用下面的方法:

        NSString *str =@"🐎";
        NSRange  range;
    
        for(int  i=0; i<str.length; i+=range.length){
    
            range = [str rangeOfComposedCharacterSequenceAtIndex:i];
            NSString *s= [str substringToIndex:range.location];
    
        }
    
    
    • FOUNDATION_EXPORT

    FOUNDATION_EXPORT: 对于extern的兼容性封装,根据不同的平台,转化为对应的extern形式。

    • NS_ASSUME_NONNULL_BEGIN 、NS_ASSUME_NONNULL_END

    在swift存在option类型,也就是使用?和!声明变量。在OC里没有这个类型,但OC里也提供了相应的的关键词来描述:__nullable和__nonnull。
    __nullable:表示对象可为null或者nil;
    __nonnull:表示对象不能为null。

    下面是实例:

     - (id)itemWithName:(NSString * __nonnull)name;   
    

    在属性声明中,也增加了两个相应的特性,因此属性可以如下声明:

    @property (nonatomic, copy, nonnull) NSArray * items;
    

    当然也可以用以下这种方式:

    @property (nonatomic, copy) NSArray * __nonnull items;
    

    推荐使用nonnull这种方式,这样可以让属性声明看起来更清晰。

    如果每个属性都需要设置nonnull或者nullable,是一件非常繁琐的事情,苹果提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END来减轻我们的工作量。在两个宏之间的代码,所有简单对象都被定义为nonnull,因此我们只需要设置nullable的指针即可。例如:

    NS_ASSUME_NONNULL_BEGIN
    @interface NullabilityClass ()
    @property (nonatomic, copy) NSArray * items;
    - (id)itemWithName:(nullable NSString *)name;
    @end
    NS_ASSUME_NONNULL_END
    

    在上面的代码中,items属性默认是non null的,itemWithName:方法的返回值也是non null,而参数是指定为nullable的。

    • NS_ENUM_AVAILABLE_IOS

    从单词的字面可以看出使用这个宏说明这个枚举开始IOS的版本:
    IOS版本如下 7_0 代表7.0的版本.用_替换;参数只有一个NS_ENUM_AVAILABLE_IOS(3_0) 代表>=3.0开始

    相关文章

      网友评论

          本文标题:从AFNetworking学习到的知识

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