目录
1.Apple Mach-O Linker Error错误
2.因为“类型修饰错误”造成很难查找的天坑
3.注意内存缓存问题
4.问题场景:九宫格hud问题
5.因为hud的问题造成的巨坑
6.循环引用的问题这样理解
7.“OBJC_CLASS$_UToPassenger” refernced from
8.有时候程序报错,但是点击红点跳不到解释错的页面,则可以如下操作
9.打印iphone设备闪退日志
10.每次做断点调试的时候,怎么打印出当前请求的接口及参数的完整链接
11.用NSLog输出如下解析信息
12.iOS开发中遇到BAD_ACCESS怎么办
13.模拟器报错
14.高版本Xcode创建的项目,用低版本打开,报xib等错误
15.程序闪退的方法栈
16.项目运行手机报错
17.xcode will continue when iPhone is finished iPhone is busy:Processing symbol files
18.AvoidCrash防闪退处理
19.iOS开发之Xib错误排除
20.Xcode报错(自定义颜色类)
21.iOS14系统的bug,cell无法点击
22.控制台打印出请求接口的参数、url、结果
23.Xcode控制台po打印不出值
24.运行出现:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object
25.删除列表某行数据时出现: reason: -[__NSArrayM objectAtIndexedSubscript:]: index 4 beyond bounds [0 .. 3]'
26.WKWebview的dealloc方法闪退
27.如何处理target has frameworks with conflicting names: xx.framework错误
28.po [XXDMTouchPlayManager _shortMethodDescription]
29.po与p区别
30.App闪退链接到钉钉打印出日志(未整理)
31.工程中有重复文件报错
32.iOS一些方便调试的代码方式
33.常见低级错误
34.因为定义的全局变量一样而报的错,不容易查找
35.因为定义的类名一样而报的错,不容易查找(duplicate symbols for architecture x86_64错误)
36.iOS 闪退 crash 大解析
1.Apple Mach-O Linker Error错误
2.因为“类型修饰错误”造成很难查找的天坑
比如:NSIndex不能assign来修饰,在iphone5及系统在10.0以下会有问题。注意要用strong!!!
同样问题:在消息中心封装的segementView中颜色是对象类型用strong,而不是用assign;造成了内存泄漏(不一定在什么时候就会发生,导致奔溃)!导致问题:测试环境不会有问题,不奔溃,线上环境程序奔溃。
带*号的都是对象,注意具体有些用copy...什么的
3.注意内存缓存问题
比如切换工程分枝的时候出现问题:分享APP时,微信朋友圈文字未显示完整,就是因为缓存问题;解决:clean一下工程即可!
4.问题场景:九宫格hud问题
九宫格:扫码拼车时,选择乘车联系人时多次后,程序奔溃!打全局断点,也不走。这时可以通过图1这个来查找之前奔溃所记录的;从中看出:Terminated due to memory issue 是内存的原因;然后一边操作一边查看内存的增长情况,测试可以看到内存一直暴涨,没有减;查看代码是因为每次更换人数的时候都要请求价格数据,而请求价格数据时肯定都要转菊花,这时内存就疯涨,而没有释放的原因就是菊花相关的hud没有设置代理,导致每次加载数据转菊花时没有释放内存!!!加上代理即可,要注意此类问题的解决办法:重点是精确定位到“问题的原因,解决过程和方法”
5.因为hud的问题造成的巨坑
问题1:删除联系人页面,删掉第一个人正常,在再删除一个人之后全部联系人都删除了,跳出界面再进来发现实际没有删掉,原因是方法[weakSelf.hud hideAnimated:NO]; 没有隐藏,所以出了问题;解决方法就是hideAnimated:NO
问题2:司机端强制300问题,开始行程后杀死app,然后再进入界面此时会强跳两次界面,因为mjRefresher问题还是hud问题,以后类似的要注意
6.循环引用的问题这样理解
比如在main函数中创建了两个类的对象A和B,现在引用计数都是1。现在让A和B互相引用(A有一个属性是B对象,属性说明是retain;B有一个属性是A对象,属性说明是retain),现在两个对象的引用计数都增加了1,都变成了2。现在执行[A release]; [B release]; 此时创建对象的main函数已经释放了自己对对象的所有权,但是此时A和B的引用计数都还是1,因为他们互相引用了。这时你发现A和B将无法释放,因为要想释放A必须先释放B,在B的dealloc方法中再释放A。同理,要想释放B必须先释放A,在A的dealloc方法中再释放B。所以这两个对象将一直存在在内存中而不释放。这就是所谓的循环引用的问题。要想解决这个问题,一般的方法可以将引用的属性设置为assign,而不是retain来处理。
7.“OBJC_CLASS$_UToPassenger” refernced from
问题解决方法:http://blog.csdn.net/azhou_hui/article/details/18312047
8.有时候程序报错,但是点击红点跳不到解释错的页面,则可以如下操作
9.打印iphone设备闪退日志
Window --- Devices --- 选中iphone --- 点击View Device Logs ,可看到图二就是各种日志...
10.每次做断点调试的时候,怎么打印出当前请求的接口及参数的完整链接
11.用NSLog输出如下解析信息
出现<object returned empty description>这种原因是打断点调试的时候用的po输出的,字面意思就是返回了空的对象,如果要避免这种情况,用NSLog输出要测试的字符串就行了
12.iOS开发中遇到BAD_ACCESS怎么办
13.模拟器报错
14.高版本Xcode创建的项目,用低版本打开,报xib等错误
15.程序闪退的方法栈
如图,这些是闪退之前走过的方法;有时候闪退到了汇编代码里面就可以通过这个方法找到错误的地方
16.项目运行手机报错
项目运行一个新的手机(之前未跑过也未添加过该设备)报如下错误,可以更换Bundle Identifier尝试
17.xcode will continue when iPhone is finished iPhone is busy:Processing symbol files
真机测试的时候会报这个提示:xcode will continue when iPhone is finished iPhone is busy:Processing symbol files,原因和解决方法如下图
18.AvoidCrash防闪退处理
这个框架利用runtime技术对一些常用并且容易导致崩溃的方法进行处理,可以有效的防止崩溃;并且打印出具体是哪个方法会导致闪退,让你快速定位导致闪退的代码。
添加方法:pod 'AvoidCrash', '2.5.2'
相关github链接:https://github.com/chenfanfang/AvoidCrash
19.iOS开发之Xib错误排除
20.Xcode报错(自定义颜色类)
21. iOS14系统的bug,cell无法点击
因为在iOS14系统下,UITableViewCell添加控件必须添加到它的contentView,直接添加无法点击,上面会有一层遮住。xib画的不影响,xib画的控件就是添加到contentView。
https://www.jianshu.com/p/a01b7aa558e7
解决: UITableViewCell:[self addSubView:]替换成[self.contentView addSubView:];
22.控制台打印出请求接口的参数、url、结果
宏定义为:#define DLog(...) printf("%s [Line %d] %s\n\n", PRETTY_FUNCTION, LINE, [[NSString stringWithFormat:VA_ARGS] UTF8String])
实用例子:DLog(@"%@",paramsDict);、DLog(@"%@",responseObject);
23.Xcode控制台po打印不出值
24.运行出现:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object
25.删除列表某行数据时出现: reason: -[__NSArrayM objectAtIndexedSubscript:]: index 4 beyond bounds [0 .. 3]'
26.WKWebview的dealloc方法闪退
27.如何处理target has frameworks with conflicting names: xx.framework错误
28.po [XXDMTouchPlayManager _shortMethodDescription]
po [XXDMTouchPlayManager _shortMethodDescription],这个方法可以打印一些第三库的具体没有暴露的实现方法,比如打印高德地图某个类里面的具体m文件的所有方法,可以找到获取实时当前位置距离终点的剩余距离和时间的信息。这个po方法是属于runtime方法。XXDMTouchPlayManager这个替换成自己想要看的那个类。
29.po与p区别
p 是 expression — 的别名,p 为 print 的简写,同时可以写为 pri 打印某个东西,可以i是变量和表达式; call 为调用某个方法,输出变量也是可以的。po 一般用于打印对象,是 expression -O — 的别名。p 和 po 的区别在于使用 po 只会输出对应的值,而 p 则会返回值的类型以及命令结果的引用名。
相关链接:https://juejin.cn/post/6869621360415637518例子:AFN请求数据success后的回调,response里面是一个数组dateArray,数组里面存的是字典。想要拿到返回的id,直接 dict[@"id"] 在控制台用po打印得到87,确实是一个正常的数字,感觉没问题。用p命令打印后是 -5432343234 明显不正确,因为dict[@"id"] 得到的是一个对象而不是NSIntger类型的,需要 [dict[@"id"] integerValue] 之后才是基本的数据类型。
30.App闪退链接到钉钉打印出日志(未整理)
31.工程中有重复文件报错
32.iOS一些方便调试的代码方式
1.判断里面加个NO让他不走这,不用去注释代码
2.h、m和xib等文件是否加入编译
3.暴力调试:用 NSLog 输出方式
用 NSLog 输出方式,Xcode 调速器断点,调试区的按钮如下:从左往右数功能分别为:
第一个:打开/关闭调试器窗口
第二个:蓝色表示打的断点有效;灰色表示断点无效
第三个:继续按钮;点击之后程序会继续执行,直到遇到下一个断点结束或者闪退
第四个:跳过按钮;点击他会执行一行代码,然后程序的控制权又交还给你(相当于点一下执行一行)
第五个:跳入按钮;如果程序里有当前光标所在函数或者方法的源代码,那么xcode将会跳入那个方法,显示代码
第六个:跳出按钮;单击它会终止当前运行的函数,并且程序会停在调用函数那行的下一行代码,控制权又回到你手中
33.常见低级错误
1.数组初始化 array 写成 alloc
2.没有创建对象就对对象做事,比如绑定协议绑在创建表格视图之前
3.驼峰标识法使用,大小写不区分
4.处理地图里用可视化放了一个分段按钮,再添加一个事件,但其无法显示在视图上,被地图遮住;解决办法:给分段控件绑定一个插座变量(如_segementController),再强制放到视图上(方法如下[self.view bringSubviewToFront:_segementController]; )类似问题同法处理。
34.因为定义的全局变量一样而报的错,不容易查找
35.因为定义的类名一样而报的错,不容易查找(duplicate symbols for architecture x86_64错误)
因为全局中定义使用了一样的类名而报错重复,全局搜索重新修改定义即可成功。
https://blog.csdn.net/weixin_30819085/article/details/97124988