杂记

作者: ProgressChen | 来源:发表于2016-11-13 12:05 被阅读17次

基础

  • 三目运算符

?:

NSString *test = @"test";
NSString *result = test?:@"fail";//result = @"test",当test为真时使用test值。

网络相关

User Agent

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

acceptableContentTypes

在网络response中会有“content type”在响应头中,如图:


responseHeader.png

content types用来标记网络响应的包的格式,此图中数据为JSON格式,可以按照这种格式进行数据解析。
在AFNetworking中默认的使用”AFJSONResponseSerializer“对responseSerializer进行初始化。

self.responseSerializer = [AFJSONResponseSerializer serializer];

所以,默认可响应的数据格式有3种“application/json", "text/json","text/javascript",如果想增加其他格式需要向acceptableContentTypes中添加即可。

+ (instancetype)OSCJsonManager
{

//AFN中所有的网络请求都是由manager进行管理操作的。
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
 
//向acceptableContentTypes中增加"text/html"格式的响应。
    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

//设置UA
    [manager.requestSerializer setValue:[self generateUserAgent] forHTTPHeaderField:@"User-Agent"];

    return manager;
}

用户基本信息的存储使用的NSUserDefaults

NSUserDefaults 使用键值对将数据进行存储。

NSUserDefualts *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setInteger:user.ID forKey:@"ID"];  //存储ID
[userDefaults setObject:user.name forKey:@"name"];  //存储name ,类型为NSString

user.ID = [userDefaults integerForKey:@"ID"];  //获取int型
user.name = [userDefaults objectForKey:@"name"];  //获取name ,类型为NSString

2016-11-17

坑1.网络数据刷新如何处理如上下拉刷新数据

填坑:上下拉请求更新数据
使用第三方的<MJExtension.h>和<MJRefresh.h>进行数据请求处理代码如下:

self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        //上拉数据请求
    }];
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        //下拉数据请求
    }];

当页面第一次显示时在viewDidLoadviewWillAppear中进行网络数据请求。

坑2.OSCObjsViewController中 refresh方法的调用
在此类的viewWillAppear中加入:NSLog(@"%@", [NSString stringWithUTF8String:object_getClassName(self)]); 查看一下继承此类时会不会自动调用此方法。

在tableViewController中,拖动cell滚动时会不是调用scrollViewDidScroll方法?
会自动调用,无论是上拉还是下拉

通知

在视图viewWillAppear:中添加一个Observer,在视图退出时viewWillDisappear:移除观察者。


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];   
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dawnAndNightMode:) name:@"dawnAndNight" object:nil];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dawnAndNight" object:nil];
}

泛型约束

__kindof

只允许本类或子类,相当于参数约束,如:
如说一个NSArray<UIView >,如果不加__kindof
,这个数组只能有UIView,即便是其子类也不行。而加了的话NSArray<__kindof UIView >,传入UIView的子类也是可以的,如UIImageView,UIButton等UIIView的子类都适用。

__typeof

在新的写法中已经将__typeof替换成了typeof()

  • typeof()属于一元操作符。类似于sizeof()
  • 可以根据typeof()括号里面的变量,自动识别变量类型并返回该类型。

typeof的使用

在iOS中的使用,常见运用于Block 。
下面看一个典型的用法:
__block typeof(self) bself = self;
[self methodBlock:^ {
[bself doSomething];
}
代码解释:定义一个和self相同数据类型的bself ,并赋值为self,在block中使用

神奇的宏

YYKit定义了以下2个宏

@weakify(self) & @strongify

// @weakify(self)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;

//@strongify
#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;

@weakify(self)展开后:__weak __typeof__(self) weak_self = self;进一步的剖析__typeof__(self)根据self的类型返所属类,进一步简化__weak CLASS weak_self = self;这就容易理解多了,相当于定义了一个弱引用类型的self。

@strongify(self)最中展开后CLASS self = weak_self; 将self变成了弱引用类型了。

@strongify一定于@weakify成对儿使用,一般多用于block中如下代码:

 @weakify(self)
    [self doSomething^{
        @strongify(self)
        if (!self) return;
        ...
    }];

方法

respondsToSelector

判断是否实现了某方法。

init

  • 在对某个视图控制器进初始化时[xxxViewController alloc] init]方法时,会自动调用initWithNibName: bundle:方法。

2016-12-20

tableView cell高度

默认cell高度是44, 定高cell建议使用self.tableView.rowHeight = 88;,针对可变的cell高度可以在UITableViewDelegate中实现:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // return xxx}
需要注意的是,实现了这个方法后,rowHeight
的设置将无效。所以,这个方法适用于具有多种 cell 高度的 UITableView。

参考链接

相关文章

  • 2018-12-01

    练车杂记

  • 学琴杂记

    学琴杂记 一 很小...

  • 散·杂·笔

    本人的记录分为散记、杂记、笔记。 散记,不分类,随心随记。杂记,分类,记录若干范畴的心得,比如物理。笔记,分类,记...

  • 杂记

    绕园一匝,回家敷面膜。 #杂记#

  • 《個蟹杂记》

    《個蟹杂记》(原名《老蟹杂记》) 作者:個蟹 世弊芳华,待来生,匿毒之护你万世。残袭浑穹。祈欢...

  • 南陵一日游(江前进)

    南陵一日游(杂记) 江前进 前言 ...

  • 关于记笔记的思考

    三种笔记:每日杂记,文献笔记,永久笔记每日杂记,就是把你觉得值得记录,需要记录的东西都收录其中的笔记。需要每天整理...

  • 月读分享•八月

    再忙也给自己留点时间看书/桃夭的杂记

  • 关于如何持续写作:他为什么可以火那么久?

    平时看书喜欢看小说,不喜欢看随笔、散文、杂记等,虽然内心一直渴望看点心理学、互联网、散文、随笔、杂记或自传等方面的...

  • 2015-04-23生活杂记——弄一碗番茄煎蛋面

    2015-04-23 生活杂记——弄一碗番茄煎蛋面 今天决定再尝试一种全新的题材,生活杂记。衣食住行皆生活,于是就...

网友评论

      本文标题:杂记

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