
iOS开发问题
Pandakingli
所在地:北京海淀
从事:iOS移动端开发。
邮箱:pandakingli2022@foxmail.com
展开
-
iOS-WKWebView取消自动选中灰色背景
在IOS中WKWebView有些地方tap点击会有一个灰色背景图层出现,会让用户感觉是个bug.-webkit-tap-highlight-color这个属性只用于iOS (iPhone和iPad)。当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色背景。要重设这个表现,你可以设置-webkit-tap-highlight-color为任何颜色。想要禁用这个高亮,设置颜色的alpha值为0即可。示例://设置高亮色为50%透明的红色:-webkit-ta原创 2020-06-06 16:03:10 · 881 阅读 · 0 评论 -
修复错误java version is not 1.8.x
1.问题系统:macOS Catalina 10.15.3 (19D76)时间:2020.02.29在执行脚本的时候,系统报错如下:java version is not 1.8.x2.解决方案2.1下载jdkjdk下载地址-oracle官方2.2 按照指示进行安装下载完成以后,双击运行下载下来的.dmg文件,进行傻瓜式next点击进行安装。2.3 检查Java环境变量在终...原创 2020-02-29 18:36:42 · 1125 阅读 · 0 评论 -
Xcode运行报错: [Process] kill() returned unexpected error 1
更新到了新系统:MacOSX 10.15.1 CatalinaXcode 11.2.1但是一开始调试程序,日志窗口就不停的打log [Process] kill() returned unexpected error 1解决方案:1- Xcode menu 打开: Product > Scheme > Edit Scheme2- 在 Environment Variabl...原创 2019-11-15 12:07:49 · 14354 阅读 · 0 评论 -
iOS开发-load和initialize的介绍
1.load方法load方法在这个文件被程序装载时调用。只要是在Compile Sources中出现的文件总是会被装载,这与这个类是否被用到无关,因此load方法总是在main()函数之前调用。 如果一个类实现了load方法,在调用这个方法前会首先调用父类的load方法。而且这个过程是自动完成的,并不需要我们手动实现。 如果一个类没有实现load方法,那么就不会调用它父类的load方法,这一点与原创 2017-11-18 12:33:06 · 388 阅读 · 0 评论 -
iOS开发-NSOperation和NSOperationQueue的使用
NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。操作步骤: 1.将要执行的任务封装到一个 NSOperation 对象中。 2.将此任务添加到一个 NSOperationQueue 对象中。 3.然后系统就会自动在执行任务。添加任务NSOpera原创 2017-11-13 17:06:37 · 716 阅读 · 0 评论 -
object_getClass与self.class的区别
object_getClass与self.class的区别object_getClass:获得的是isa的指向 self.class:当self是实例对象的时候,返回的是类对象,否则则返回自身。原创 2017-11-03 17:27:11 · 1962 阅读 · 0 评论 -
iOS开发-面向切面编程之 Aspects 源码解析
1、面向切面编程应用在统计上 业务逻辑和统计逻辑经常耦合在一起,一方面影响了正常的业务逻辑,同时也很容易搞乱打点逻辑,而且要查看打点情况的时候也很分散。在 web 编程时候,这种场景很早就有了很成熟的方案,也就是所谓的AOP 编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在 iOS 中,要想实现相似的效果也很简单,利原创 2017-11-03 17:18:22 · 690 阅读 · 0 评论 -
iOS开发-修饰代理delegate用weak还是assign?
1.对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)2.对于assing:assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针。@property (nonatomic, assign, readwrite) id delegate;即便delegate指向的对象销毁了,delegate原创 2017-11-17 15:27:50 · 1764 阅读 · 0 评论 -
iOS开发-UITableView在iOS11默认使用Self-Sizing造成contentSize计算问题的解决
UITableView在iOS11默认使用Self-SizingUITableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致很多地方的TableView高度和contentSize出现了问原创 2017-11-03 10:40:09 · 2317 阅读 · 1 评论 -
iOS开发-如何用GCD同步若干个异步调用?
如何用GCD同步若干个异步调用?(比如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图展示给用户)使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。 代码如下-(void)test{ //获取并发队列 dispatch_que原创 2017-11-12 16:10:59 · 1581 阅读 · 0 评论 -
iOS开发-队列和同步异步执行的结果分析
多线程中的队列有: 串行队列,并发队列,全局队列(并发),主队列(串行)。执行的方法有:同步执行和异步执行。提到多线程:pthread,NSThread,GCD,NSOperation 其中phtread是跨平台的。 GCD和NSOperation都是常用的,后者是基于前者的。两者区别: GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行。 NSOperation则是直原创 2017-11-12 15:02:24 · 1723 阅读 · 0 评论 -
iOS开发-dispatch_sync阻塞主线程造成死锁
NSLog(@"之前 - %@", [NSThread currentThread]); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"sync - %@", [NSThread currentThread]); }); NSLog(@"之后 - %@", [NSThread currentThread]原创 2017-11-12 10:51:48 · 5627 阅读 · 0 评论 -
iOS开发-Runtime是如何实现weak属性的?
weak属性的特点: weak 表明该属性定义了一种“非拥有关系” (nonowning relationship)。 为weak属性设置新值时,设置方法既不保留新值,也不释放旧值。 同assign类似,然而在属性所指的对象释放时候,属性值也会清空(nil out)。runtime是如何实现 weak 变量的自动置nil?weak 对象会放入一个 hash 表中。 用 weak 指向的对象原创 2017-11-11 20:15:19 · 2789 阅读 · 0 评论 -
iOS开发-__func__的使用
由于iOS底层是GCC,所以也支持 func标识符,用于打印当前函数名,可以说是排错利器.#import "Amodel.h"@implementationAmodel+ (void) load{NSLog(@"%s", __func__);}@end打印信息:+[Amodel load]原创 2017-11-10 17:55:52 · 1523 阅读 · 0 评论 -
iOS开发-RuntimeDebug运行时源码调试(macOS APP)
运行时源码-苹果官网如果只是看源码,远远不如自己造个工程进行断点调试来的清楚。 大家可以直接到我的githu上下载工程进行调试,目前RuntimeDebug_MacOSAPP分支是在MacOS APP做的。 RuntimeDebug_MacOSAPP-可以调试的运行时工程(MacOS 工程)先看看运行效果: 断点: 使用步骤: 第1步:编译的target选成objc 第2步:编译的t原创 2017-11-20 13:49:21 · 1743 阅读 · 0 评论 -
iOS开发-APP启动过程
当用户点击应用图标之后,应用就开始启动。应用启动完成后,就会展示一系列的视图,和用户进行各种各样的交互(如滑动、点击)。当用户退出应用后,该应用就无法和用户进行交互。这一过程就体现了一个应用的生命周期(从启动到退出)。这里只介绍应用程序的显示部分。 在介绍应用启动过程及原理之前,先来了解一些概念以及其作用。1、UIApplication UIApplication对象是应用程序的象征,一个原创 2017-11-06 16:13:54 · 624 阅读 · 0 评论 -
iOS开发-iOS11获取定位权限失败的解决方法
6:关于iOS11定位失效的问题解决方案This app has attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain both NSLocationAlwaysAndWhenInUseUsageDescription and NSLocati原创 2017-11-17 09:38:33 · 5150 阅读 · 2 评论 -
iOS开发-遍历并修改数组遇到的问题
一、使用for-in-(void)test_forin{ NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@"10", @"20", @"30", @"40", @"50"]]; for (NSString *str in array) { if ([str...原创 2019-07-08 17:25:54 · 2438 阅读 · 0 评论 -
Objective-C中的值传递和引用传递
值传递::Pass By Value引用传递:Pass By Reference一、C语言中的参数传递1、传值形参和实参占不同内存单元,传递的实际上是实参变量或表达式的一个拷贝副本。形参的值发生变化也不会传回给实参,是单向传递。 void increase(int x) { x++; }2、传地址传递的是实参变量地址的拷贝值,而不是实参变量的值,在被调函数中对地址所指对象...原创 2019-07-08 16:47:25 · 2803 阅读 · 2 评论 -
iOS开发-Masonry约束宽高比
先看看Masonry的源代码,可以发现两个属性这两个属性可以设置视图中的宽高比例使用multipliedBy必须是对同一个控件本身,比如,上面的代码中,我们都是对bottomInnerView.mas_width本身的,如果修改成相对于其它控件,会出问题。//multipler属性表示约束值为约束对象的乘因数- (MASConstraint * (^)(CGFloat multiplier...原创 2019-04-11 15:20:31 · 5054 阅读 · 0 评论 -
podfile 指定第三方库版本范围
经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写好Podfile文件,通过这个文件来配置第三方库与项目之间的依赖、版本等信息1、永远使用最新版本pod ‘XXSDK’当我们永远使用远程仓库中的最新版本时,我们只需要指定仓库名即可。当有新的版本发布时,执行pod update命令,会更新至最新的版本。因为版本之间可能会存在...原创 2019-01-14 19:55:30 · 978 阅读 · 0 评论 -
iOS开发-停止WebView播放视频/音频
很多时候在WebView播放视频的时候,会有一些通知或者其他语音播报的内容,这个时候就要暂停WebView正在播放的视频了。通过JS直接控制网页中的 video/media标签// 停止视频播放[webview stringByEvaluatingJavaScriptFromString: @"var videos = document.getElementsByTagName('...原创 2018-10-10 21:02:57 · 3573 阅读 · 0 评论 -
iOS性能分析-Xcode Instruments Time Profiler 分析APP耗时方法
Time Profiler时间分析工具用来检测应用CPU的使用情况。可以看到应用程序中各个方法消耗CPU的时间。开始Time Profiler点击开始Separate By Thread:线程分离,在调用路径中能看到占用CPU最大的线程.Invert Call Tree:从上到下跟踪堆栈信息.可以看到方法调用路径最深方法占用CPU耗时,比如A{B{C}},勾选后显示为C-&g...原创 2018-09-21 23:26:50 · 1983 阅读 · 0 评论 -
iOS的看门狗(watchdog)机制
为了防止一个应用占用过多的系统资源,苹果设计了一个“看门狗”(watchdog)的机制。在不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程。开发者们在crashlog里面,会看到诸如0x8badf00d这样的错误代码。异常代码:“0x8badf00d”,即“ate bad food”。https://blog.youkuaiyun.com...原创 2018-09-21 22:47:44 · 3731 阅读 · 0 评论 -
iOS开发-手动解析崩溃日志 Crash Log
一、 dSYM文件.dSYM(debugging SYMbols)又称为调试符号表,是起源于贝尔实验室的DWARF(Debugging With Attributed Record Formats).二、dSYM文件和Crash Log一致性二者的对应关系可以通过UUID来确定。1、从崩溃日志中获取UUID崩溃日志有个Binary Images模块Binary ...原创 2018-09-06 00:30:03 · 1629 阅读 · 0 评论 -
iOS开发-使用dSYM文件符号化Crash日志
1、获取crash日志通过Xcode获取到崩溃日志,方法是Xcode->Window->Devices View Device Logs 可以将日志导出到电脑上2、获取dSYM文件Xcode编译项目后,会生成一个同名的 dSYM 文件。 dSYM 是保存 16 进制函数地址映射信息的文件,每次编译项目的时候都会生成一个新的 dSYM 文件。 iOS 设备中会有日...原创 2018-09-05 00:44:12 · 1394 阅读 · 0 评论 -
ReactiveCocoa RAC使用-处理多个网络请求
-(void)requestData{//网络请求1 RACSignal *signal1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { NSLog(@"网络请求1"); [subscriber sendNext:@"网络请求1"]; ...原创 2018-04-29 07:40:59 · 4093 阅读 · 1 评论 -
Facebook Componentkit 概况了解
一、概况 1.1Components 三大特性:声明式 Declarative:函数式Functional:组合式Composable:1.2、Components 优缺点Strengths 优点Considerations 可改进的地方二、相关API 2.1 Component类(避免直接继承CKComponent类)2.2 Composite Components...原创 2018-05-11 19:20:47 · 845 阅读 · 0 评论 -
iOS开发-nil/Nil/NULL/NSNull 的使用
nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值。Nil: A null pointer to an Objective-C class.NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NU原创 2017-11-10 17:13:53 · 403 阅读 · 0 评论 -
iOS开发-OC 中给 nil 发送消息会崩溃吗?为什么?
Objective-C 是以 C 语言为基础的, PC 上,在 C 语言中对空指针进行操作, 程序会由于越界访问而出现保护错进而崩溃。原因需要从源代码中寻找, 下面是 objc_msgSend 的 arm 版汇编代码片段: 在 arm 的函数调用过程中, 一般用 r0-r4 传递参数, 用 r0 传递返回值。 对应 objc_msgSend,第一个参数为 self,返回值也是 self原创 2017-11-10 16:24:55 · 1287 阅读 · 0 评论 -
iOS 隐藏百度地图SDK的百度LOGO
iOS 隐藏百度地图SDK的百度LOGO根据百度地图SDK的图层结构如下图:第一个思路:找到LOGO对应的UIIMageView,并将其隐藏hidden UIView *mView = _mapView.subviews.firstObject; for (id logoView in mView.subviews) {原创 2017-01-27 10:44:14 · 2269 阅读 · 0 评论 -
使用炮筒机器人(Automator)来检测内存泄漏-block相关(CheckLeak)
使用炮筒机器人(Automator)来检测内存泄漏-block相关(CheckLeak)在iOS开发中我们经常用到block,无论是GCD还是参数传递,block都是一个很不错的选择。然而有利也有弊,block使用不注意的话会产生循环引用。 global_myAnimation(^{原创 2016-09-29 11:39:25 · 937 阅读 · 0 评论 -
iOS开发79-Xcode报错:The file “XXX” couldn’t be opened because you don’t have permission to view it.的解决方法
iOS开发79-Xcode报错:The file “XXX” couldn’t be opened because you don’t have permission to view it.的解决方法真机运行程序的时候Xcode提示:”the file “XXX” could not be opened because you don't have permission to view原创 2016-08-25 15:14:56 · 5702 阅读 · 1 评论 -
iOS开发78-iPhone的处理器是32位还是64位的?
iOS开发78-iPhone的处理器是32位还是64位的? 苹果手机的处理器并不都是64位。是从iPhone5S开始,也即是A7处理器之后是64位处理器。 iPhone 5s以上都是64位,含5s。 即iPhone 5s,iPhone 6,iPhone 6plus,iPhone 6s,iPhone 6s plus以及即将推出的iPhone 7,iPhone 7原创 2016-08-25 14:02:28 · 3066 阅读 · 0 评论 -
iOS开发77-关于Build Active Architecture Only属性的配置
iOS开发77-关于Build Active Architecture Only属性的配置Build Active Architecture Only(只Build当前活动的架构)这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。 而设置为no时,会编译所有的版本。 这个是设备对应的architecture: armv原创 2016-08-25 10:39:50 · 1139 阅读 · 0 评论 -
iOS崩溃日志中[__NSSetM addObject:]和[__NSArrayM insertObject:atIndex:]的解决办法
iOS崩溃日志中[__NSSetM addObject:]和[__NSArrayM insertObject:atIndex:]的解决办法[__NSSetM addObject:] object cannot be nil[__NSArrayM insertObject:atIndex:] object cannot be nil使用这两个方法的时候一定要确保object不能是ni原创 2016-09-03 19:11:19 · 6595 阅读 · 0 评论 -
提高XCode的编译链接速度—XCode编译速度慢的解决方案
提高XCode的编译链接速度—XCode编译速度慢的解决方案1. 提高XCode编译时使用的线程数defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快原创 2016-08-31 14:44:04 · 1585 阅读 · 0 评论 -
如何查看Mac电脑的处理器核心数目-CPU的核心数目
如何查看Mac电脑的处理器核心数目-CPU的核心数目1、通过点击关于本机来查看2、通过活动监视器来查看原创 2016-08-31 14:48:51 · 76715 阅读 · 3 评论 -
常见错误7-搭建hexo,在执行hexo deploy后,出现 error deployer not found:github的错误
常见错误7-搭建hexo,在执行hexo deploy后,出现 error deployer not found:github的错误not found:github或者not found:githexo 更新到3.0之后,deploy的type 的github需要改成git先执行npm install hexo-deployer-git --save原创 2015-12-13 16:57:45 · 2521 阅读 · 1 评论 -
iOS常见错误6-The identity used to sign the executable is no longer valid.
iOS常见错误6-The identity used to sign the executable is no longer valid.在真机调试的时候经常碰到这样的错误。一般就是证书过期了,要登录到苹果开发者网站上去重新设置一个证书就好了。著作权声明:本文由http://my.youkuaiyun.com/Nathan1987_原创,欢迎转载分享。请原创 2015-12-11 19:42:08 · 651 阅读 · 0 评论