百思不得姐第三天
上午
错误:键盘处理
设置cell的分割线
方法一:添加一个View再上面
方法二:修改对应的Frame
拦截系统frame的设置,根据需求修改对应的值
不管别人传什么进来原值都不变,使用我们默认的值
优化
控制器挂掉取消
AFN内部实现
直接终止请求
暂停请求
取消请求总结
AFN返回码
debug不能全为小写
两者不同,下面的带IBOutlet的内部会隐士的强引用着他
所以调用方式是先打印后面的,就是说走完第一行之后并且没有销毁,等}走完之后就销毁
下午
设置圆形图片的简单方法(但是这样会影响性能,我们一半使用绘图)
全局常量总结
以后不能再改(常量)--》宏:临时的数据,内存空间
以后还想修改--》全局变量
全局常量最终方案:
- static NSString *const name = @“iCocos”
- const:不能改,只有一块内存(常量)
- static:只能在这里(本类)使用,全局变量
- extern:引用一个全局变量(extern int name:引用一个全局变量name,系统会根据他全文件找),如果不让外界访问就使用static修饰
const(只修饰后面的整体:常量->不能改)
- 在*前(int const *p):p 能改 *p不能改
- 在*后(int * const p):p不能改 *p能改
- 前后都有(int const * const p):p *p都不能改
能用const就用const,我们应该使用它来取代宏,因为只有一块内存(只能放一些固定的值,不能放方法或者函数)
const编译阶段就确定类型或者值的,如果我们不能确定对应的值和类型就需要使用宏
局部变量作用域不变,生命周期改变
全局变量作用域改变,生命周期不变
最终优化方案:
新建一个类在m实现文件中定义一个常量(定义常量的值)
让后在头文件中(也可以在pch文件中,但不建议)引用一下(引用常量),或者不使用extern直接使用UIKIT_EXTERN
综上:
本文件
直接在本文件中
- static NSString *const name = @“iCocos"
所有文件
- 新建一个Const类
- 实现文件:NSString *const name = @“iCocos"
- 头文件:UIKIT_EXTERN NSString *const name;
- 在pch中包含头文件
最后在哪里都可以使用,而且性能非常好
常见错误:
查看是否定义两个常量,变量,属性名,或者类,修改或者删除一个就可以
晚上
__Block和__Weak总结
__block
1.__block对象在block中是可以被修改、重新赋值的。
2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题。
保存manager
- __unsafe_unretained typeof(self) weakSelf = self; //MRC 等同于 __weak UIViewController *weakSelf =self;
- __weak typeof(self) weakSelf = self; //ARC
__weak
使用了__weak修饰符的对象,作用等同于定义为weak的property。自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil。
- __block NSString *key = nil;
总结
- 因此,__block和__weak修饰符的区别其实是挺明显的:
- 1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
- 2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
- 3.__block对象可以在block中被重新赋值,__weak不可以。
- PS:__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置空为nil。所以尽可能不要使用这个修饰符。
请求失败总结
success中失败
- 域名在,但是后面的路径有错误,
- 参数错误
failsure中失败
- 1:网络错误
- 2:系统错误
1 /** 2 * 现实提示框 3 */ 4 // [SVProgressHUD show]; 5 6 //请求URL 7 NSString *requestUrl = @"http://api.budejie.com/api/api_open.php"; 8 9 //请求参数 10 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 11 dict[@"a"] = @"tag_recommend"; 12 dict[@"action"] = @"sub"; 13 dict[@"c"] = @"topic"; 14 15 // __unsafe_unretained typeof(self) weakSelf = self; //MRC 等同于 __weak UIViewController *weakSelf =self; 16 // __weak typeof(self) weakSelf = self; //ARC 17 18 /** 19 * 发送GET请求 20 */ 21 __weak typeof(self) weakSelf = self; 22 [self.manger GET:requestUrl parameters:dict success:^void(NSURLSessionDataTask *data, id responer) { 23 /** 24 * 如果返回数据为空 25 */ 26 if (responer == nil) { 27 [SVProgressHUD showErrorWithStatus:@"加载数据失败"]; 28 return; 29 } 30 //解析字典数据的数据保存到模型中去 31 weakSelf.tags = [iCocosTagModel objectArrayWithKeyValuesArray:responer]; 32 33 iCocosLog(@"ios-----success"); 34 iCocosLog(@"%@", self.tags); 35 36 //刷新表格 37 [weakSelf.tableView reloadData]; 38 39 //隐藏提示框 40 [SVProgressHUD dismiss]; 41 42 } failure:^void(NSURLSessionDataTask *data, NSError * error) { 43 44 /** 45 * 请求失败后的状态码 46 */ 47 48 if (error.code == NSURLErrorCancelled) return; 49 50 if (error.code == NSURLErrorTimedOut) { 51 [SVProgressHUD showErrorWithStatus:@"加载超时,请稍候再试!"]; 52 } else { 53 [SVProgressHUD showErrorWithStatus:@"加载数据失败"]; 54 } 55 iCocosLog(@"ios-----false"); 56 }]; 57