- 博客(30)
- 收藏
- 关注
原创 iOS 13 dark mode适配 navigationBar没有随着模式切换变色
原因:self.navigationBar.barStyle = UIBaselineAdjustmentNone;这行代码本来是为了隐藏navigationBar的下划线,结果在iOS13中与dark mode配置冲突.解决办法:self.navigationBar.barStyle = UIBarStyleDefault;将barStyle配置改成default.除...
2019-10-09 17:06:13
1244
原创 隐私政策
本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确,更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉,审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权...
2019-06-21 16:49:39
237
原创 iOS逆向笔记:分析静态库
1.查看架构lipo -info Crashlytics2.选择一种架构分析lipo Crashlytics -thin arm64 -output Crashlytics_arm643.解压静态库文件mkdir Objectscd Objectsar -x ../Crashlytics_arm643.1 搜索动态库一般从初始化函数开始,搜索动态库包含内容,例如包含...
2018-11-17 01:29:59
1780
原创 iOS逆向笔记: gdb指令
添加断点b *地址或b *(偏移+基础地址)b 方法名 查看断点信息info b 禁用断点disable breakpointNumber禁用全部disable启用enable breakpointNumber启用全部enable 删除断点delete或者d breakpointNumber 继续运行continue或...
2018-11-17 01:26:47
214
原创 iOS逆向笔记:底层知识回顾
OC底层,iOS相关知识回顾 触发事件响应时用[address nextResponder]获取下一个响应者,一般顺序view > viewController > window > UIApplication > UIAppDelegate > nil如果button设置target为nil,则会一层层向下寻找responder 寻找...
2018-11-11 23:53:25
221
原创 iOS报错: this class is not key value coding-compliant for the key
1.检查对应的xib是否有连线失效2.如果是collectionView,检查对应的xib文件,module是否选择正确
2018-11-09 17:14:11
2239
1
原创 PS cs6 for MAC 安装失败,提示 “获取 Adobe Support Advisor”解决办法
1.打开安装文件2.选择安装程序,显示包内容3.进入contents/MacOS文件夹,执行install
2017-02-23 16:02:39
13177
原创 OC阅读笔记十九:禁用retainCount
在ARC中,使用retainCount会报错,此方法已经被正式废弃.即使在MRC中,也不要使用retainCount. retain只能返回某个时间点上的引用计数,但是我们并不知道该对象是否已经添加到自动释放池中,使用retaincount 反而会误导开发者错误判断对象的引用计数值. 系统会尽可能的将NSString实现成单例对象,如果字符串是个编译期常量,那么编译器会将NSS
2016-04-12 22:27:27
451
原创 OC阅读笔记十八:僵尸对象(Zombie Object)
在捕捉向已回收对象发送消息的异常时,可使用僵尸对象.若要使用僵尸对象,则要在Scheme->run中勾选"Enable Zombie Objects". 若开启僵尸对象,在回收对象时,会将该对象转化为僵尸对象.即将回收对象的isa指针指向特殊的僵尸对象,该僵尸对象是_NSZombie_的拷贝. 僵尸类能响应所有的选择子. 在消息转发机制的___forwarding__
2016-04-11 23:30:11
1208
原创 OC阅读笔记十七: "autorelease pool"降低内存峰值
在可能进行多次循环的情况下,或者循环中使用了开销大的对象时,等待循环结束再去释放循环中临时创建的对象,会导致内存峰值过高. 并非每个循环都要使用autoreleasepool来优化,在确认其内存用量前,不要建立多余的自动释放池,尽管自动释放池的开销并不大,但还是有的. 自动释放池排布在栈中,收到autorelease消息后,会将对象放入栈顶的池里 @autorelea
2016-04-10 22:31:24
430
原创 OC阅读笔记十六:保留环
几个对象互相引用形成环,当无其他对象引用环中的对象时,就会造成内存泄露.保留环可以通过弱引用声明”非拥有关系"来避免. unsafe_unretained修饰的对象,在调用方法时,若是对象被回收,可能会使应用崩溃. weak修饰的对象,在对象被回收后,就会自动将属性值设为nil.这么做导致数据错误比起对象被回收应用崩溃体验上要来得好
2016-04-10 22:26:12
299
原创 OC阅读笔记十五:"异常安全代码"的内存管理
在使用Objective-C++编码时,或者使用第三方库时抛出不受控制的异常的情况下,需要捕获和处理异常. 在MRC下,捕获异常后可以在@finally里释放try块里创建的对象. 在ARC下,由于生成安全处理异常的附加代码会导致应用程序变大,降低运行效率等问题,需要时必须手动开启-fobjc-arc-exceptions标志来使用该附加代码.并且当OC里抛出异常时应用已经终止
2016-04-10 22:23:30
343
转载 更新证书错误:No matching provisioning profiles found
在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试会出现“Your build settings specify a provisioning profile with the UUID‘XXX’, however, no such provisioning profile was found. Xcode can resolve this issue by downloading
2016-04-07 17:54:38
524
原创 真机调试报错:Please verify that your device’s clock is properly set
真机调试报错:Please verify that your device’s clock is properly set, and that your signing certificate is not expired. (0xE8008018).
2016-04-07 17:52:28
855
原创 OC阅读笔记十四:dealloc
在dealloc方法里只应该释放所有对象并解除订阅的KVO和通知,不要有多余的操作. 如果对象拥有一些开销大或者系统内稀缺的资源,那么等到dealloc方法再释放是不适合的.通常是实现另一个清理对象的方法,在使用完这些资源后就调用该方法清理资源. 如果在dealloc里调用其他方法容易导致各种应用崩溃的问题,比如异步方法执行后,要回调对象时,对象已经被摧毁了,那么回调操作就好出
2016-04-07 00:42:16
396
原创 OC阅读笔记十三:ARC(下)
在方法中返回自动释放对象的时候,会调用objc_autoreleaseReturnValue函数检测返回的对象是否执行retain操作,如果执行就设置全局数据结构的一个标志位.而不执行autorelease操作. 与之相似,如果调用方法的代码要保留此对象,则调用objc_retainAutoreleasedReturnValue函数,检测刚刚的标志位,若已经置位,则不执行retain操作
2016-04-06 00:34:57
354
原创 OC阅读笔记十二:ARC(上)
ARC的功能都是基于核心的内存管理语义构建的. 在ARC中调用 retain,release,autorelease,dealloc方法都会报错,因为这会干扰ARC自动管理工作的进行. 并且在ARC调用这些方法时,并不是通过object-C的消息派发机制.而是通过直接调用其底层的C语言版本.比如retain方法的等价底层函数 objc_retain.这么做对于频繁执行的保留释放
2016-04-05 00:26:48
337
原创 OC阅读笔记十一:引用计数
对象如果存活,就说明正被其他对象拥有.从引用关系不断向下挖掘,会发现一个"根对象". 每个应用都有根对象(root object),在Mac OS X 应用中是NSApplication对象,iOS 应用中是UIApplication对象,两者都是应用程序启动时创建的单例. 当对象引用计数归零被回收时,系统会将内存标记可重用"reuse"放入可用内存池,但并不意味着对象不可用.
2016-04-04 01:54:56
339
原创 OC阅读笔记十:匿名对象
协议可以在某种程度上提供匿名类型,当接口背后有多个不同的实现类,又不想声明指定哪个类时,可以使用这种方法.因为有时候这些类会变,有时候又无法容纳于标准的类继承体系中,不能以某个公共基类来统一标示. 在一些情况下,对象的类型并不重要,重要的是对象有没有实现某些方法,可以用"匿名类型"来表达该概念. 在开发后续版本时,如果之前使用了"匿名对象"概念,则无需改变公有API,即可切换实
2016-04-02 23:03:57
321
原创 OC阅读笔记九:分类(下)
除了"class-continuation"之外的分类定义属性都无法向类中新增实例变量. 如果必要,可以用@dynamic声明,然后使用消息转发机制在运行期拦截方法调用,提供实现方法. 关联对象能解决分类不能合成实例变量的问题,但容易在内存管理问题上出错. 一般最好的作法是将所有属性都定义在主接口. 在"class-continuation"分类里可以隐藏实
2016-04-02 00:31:44
251
原创 OC阅读笔记八:分类(上)
将类里的方法根据功能分类,便于管理和调试. 例如某些私有方法,可以放在名为private的分类中,这样即使是其他使用者看到回溯信息时,也能理解方法的用途.这算是一种编写"自我描述式代码(self-documenting code)"的办法. 定义分类和方法时,应该加上程序或者库一致使用的前缀,这样能有效避免与其他分类重名. 分类重名并不会造成错误,但是后加载的分类会覆
2016-03-31 23:19:00
251
原创 OC阅读笔记七:委托数据源与协议
存放委托对象的属性(delegate)要用weak定义,因为可能委托的对象也持有本对象.二者之间必须为"非拥有关系".避免保留环造成内存泄露. 根据需求可以选择用weak或unsafe_unretained来定义delegate. 委托方法即可以传递参数给委托对象,也能获取委托对象的返回值. 委托协议一般用可选的(optional)标注,在调用委托方法前,必须先确定委
2016-03-30 22:45:05
385
原创 OC阅读笔记六:NSCopying协议
若想让自己的类支持拷贝,则必须实现NSCopying协议.该协议只有一个方法:-(id)copyWithZone:(NSZone*)zone 如果自定义的对象分可变与不可变版本,需同时实现NSCopying和NSMutableCopying协议 拷贝可变的属性时,应该拷贝它的实例变量, 无论当前拷贝的对象是否可变,copy取得的都是不可变版本,而mutableCopy
2016-03-29 23:03:47
364
原创 OC阅读笔记五:异常机制
在ARC环境下发生异常,可能导致作用域末尾释放的对象得不到自动释放.如果想要"异常安全",则需要设置"-fobjc-arc-exceptions"编译器标志. Objective-C当前只有在极为严重的情况下抛出异常,并且退出应用,不考虑恢复问题. 一般非致命错误时,通常是返回nil/0,或者使用NSError. NSError对象内封装了三条信息,domain(错误
2016-03-28 22:10:07
300
原创 OC阅读笔记四:消息转发
在消息转发的过程中,可以告诉对象如何处理无法解读的未知消息. 消息转发分两大阶段,第一阶段为"动态方法解析",就是判断接收者所属的类能否动态添加方法处理未知消息.若使用该方法,需实现相关的代码.通常用来实现@dynamic属性. 第二阶段第一步,如果第一阶段返回NO,则会查看接收者内部其他对象是否能够处理未知的选择子,如果可以便返回该对象,否则进入下一步. 第二阶段第
2016-03-27 23:26:40
280
原创 OC阅读笔记三:动态绑定
Objective-C通过向对象发送消息来调用方法,其核心函数为objc_msgSend. objc_msgSend的参数分三部分:对象为接收者,方法名为选择器,以及消息中的参数. 每个类中都有个方法列表,由选择器作为key,方法实现作为值.objc_msgSend通过查询方法列表来获取具体的实现代码. 方法列表里的选择器与其对应的方法可以在运行时修改. 每
2016-03-27 00:01:32
328
原创 OC阅读笔记二:命名规范,避免冲突
由于Apple保留两字母前缀,当选择前缀时最好从三字母开始. 不仅仅是类名,应用程序中的所有名称都应该加前缀,包括分类和分类的方法. 前缀不仅能避免冲突,在栈回溯信息中,也能起到定位的作用. 如果要发布供其他人使用的代码,并在其中引入了第三方库AAA,需要给AAA加上前缀.避免使用者导入的其它第三方库里包含了相同的内容冲突,否则程序会造成重复符号错误. 当使
2016-03-25 23:16:44
451
原创 OC阅读笔记一:尽量使用不可变对象
当将可变对象放入collection又修改值时,容易破坏set的内部数据结构,令其失去固有的语义; 将属性声明为readonly后,当试图改变属性值时编译器就会报错.保证开发时对象的底层数据不会改变,对象本身的数据结构也就不可能出现不一致的现象. 在对象内部"class-continuation分类"可以将属性重新声明为readwrite. 如要修改属性值,应该通过该
2016-03-24 22:24:14
360
原创 iOS真机调试报错 A valid provisioning profile for this executable was not found.
真机调试时发现两台测试机一台可以调试,一台报错.经过排查发现了原因:解决方法如下:1.打开Xcode-> Window-> devices 选择报错的测试机2.选择show provisioning profiles3.将mobileprovision证书加入
2015-12-16 17:35:03
1363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人