iOS 常见问题的整理

一、事件冲突问题解决步骤(手势冲突为例):

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";
}

你可能感兴趣的:(iOS 常见问题的整理)