杂记

基础

  • 三目运算符

?:

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。

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • cookie和缓存 Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一...
    纵我不往矣阅读 468评论 0 1
  • Charles 模拟网络状态 在Charles的菜单上,选择“Proxy” --> “Throttle Setti...
    永断阎罗阅读 367评论 0 3
  • 文档对象模型DOM提供访问和操作页面内容的方法和接口 浏览器对象模型BOM提供与浏览器交互的方法和接口 ECMAS...
    洁芬阅读 326评论 0 0
  • 1.Block的特性和使用场景 Block 是一种闭包语法,将代码像对象一样传递,最重要的特性是,Block 可以...
    缙云饕餮阅读 285评论 0 1
  • title: javascript杂记date: 2017-05-21 14:34:25tags: javascr...
    Gary23阅读 414评论 0 0

友情链接更多精彩内容