一、事件冲突问题解决步骤(手势冲突为例):
1. 定位问题: 手势冲突
2.基本知识:掌握事件的传递机制
3. 逐步缩小范围: 优先搜索相关操作的代码 - 相关联的类
二、关于导航条的隐藏问题 (navigationBarHidden与navigationBar.hidden的区别)
navigationBarHidden通过控制器隐藏导航栏,所做的操作:
1.导航栏移到屏幕外 (po导航栏可知)
2.导航栏.hidden属性改变(po导航栏可知)
3.移除导航栏.[po-superView地址为0x000000,导致默认的边沿侧滑返回手势失效)
注意:通过navigationBarHidden隐藏的导航条,通过改变navigationBar.hidden并不能显示,反之亦然
三、头文件的循环引用 (当以另一个类对象作为属性时提示找不到对象)
解决办法: @class ClassName
四、引入静态库却提示没有找到静态库中的方法
BuildSetting -> OtherLinkerFlags -> 添加 “-ObjC"
原因:OC是运行时语言, 分类不是新的类,不会产生一个新的链接符号
其他解决方式: "-all_load” 加载静态库中的所有文件,包括C++
其他解决方式: “-force_load” 在下面拖入静态库绝对路径以加入指定的静态库
五、网络内存泄漏 (通过Task监控网络请求的过程出现)
解决办法:NSUrlSession网络请求完成后,要对Task进行一个释放finishTaskAndInvalidate的操作,如果是下载中中断就用对应的 cancel 操作
六、线程泄漏(NSOperation)
同时存在 main和star操作 ,会只执行 star ,用main的话由系统释放线程,用star需要手动发送完成的消息队列才会对线程进行释放.
七、属性问题(属性就是变量和方法的封装)
声明一个属性后,手写了setter、getter方法,那么就会自动删除其成员变量, 除非用@synthesize声明
@interface ViewController ()
@property(nonatomic,copy)NSString *name;
@end
@implementation ViewController
//@synthesize name = name;
@synthesize name = _name;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// name;
_name;
}
- (void)setName:(NSString *)name {
}
- (NSString *)name {
return @"123";
}