- 博客(21)
- 资源 (53)
- 收藏
- 关注
原创 手写签名的实现
使用UberSignature实现手写签名功能。UberSignature效果图 代码示例 demo使用说明 1、添加源码(如下图所示) 2、导入头文件#import "UBSignatureDrawingViewController.h"3、实例化@interface ViewController ()@property (nonatomic, st...
2018-07-26 17:42:13 3243
原创 UITableViewStyleGrouped设置table样式时,出现空白间距
使用UITableViewStyleGrouped设置table样式时,且设置了属性tableFooterView时,table视图上下会出现空白间距。怎么破? 经过一番调试和代码修改后,发现原来是设置delegate、dataSource和tableFooterView的顺序有关导致的。修改成如下顺序,则显示正常:- (instancetype)initWithFrame:(CGR...
2018-07-19 13:51:34 2001
原创 UITableView列表reloadSections等刷新数据时屏幕跳动
使用如下代码解决屏幕跳动[UIView performWithoutAnimation:^{ NSIndexSet *reloadSet = [NSIndexSet indexSetWithIndex:1]; [self.workTable reloadSections:reloadSet withRowAnimation:UITableViewRowA...
2018-07-14 21:00:08 16483
原创 运行时机制重写descrption实现实体模型数据打印查看
使用前打印实体模型时,结果是这样的(lldb) po self.userModel<SXLoginModel: 0x7fb08bc36aa0>使用后打印实体模型时,结果是这样的(lldb) po [self.userModel descriptionShow]deptName : 南京校区;lastSigninTime : 2018-07-13 16:16:...
2018-07-13 16:30:53 392
原创 iPad开发中UISplitViewController和UIPopoverPresentationController的使用
对于 iPad 开发来说,因为屏幕大,为了用户操作的方便,所以通常使用 UISplitViewController来实现导航。 同时也会使用UIPopoverPresentationController实现浮窗功能。源码地址效果图 代码示例: 设置根视图控制器- (BOOL)application:(UIApplication *)application didFinishL...
2018-07-12 15:46:13 693
原创 CocoaPods的使用——新电脑下载源码后,pod目录异常
新电脑下载源码后,pod项目异常,如图所示: 细猜,可能的原因是原来的项目是通过pod安装了第三方依赖库,而对于当前的新电脑,可能开发环境还没有配置好,可能原因如下: 1、没有安装cocoapods 2、没有使用pod install安装依赖包根据这个思路,于是在终端进入项目文件夹,并执行pod install命令后,果然可以正常运行了。...
2018-07-07 11:40:53 360
原创 runtime方法替换
通过方法转换,将array添加元素的方法进行转换,避免添加nil对象时出现crash情况。#import <Foundation/Foundation.h>@interface NSMutableArray (RunTime)@end#import "NSMutableArray+RunTime.h"#import <objc/runtime.h>...
2018-07-07 07:54:00 763
原创 第四章 Runtime应用:实现字典和模型的自动转换
用runtime提供的函数遍历Model自身所有属性,如果属性在json中有对应的值,则将其赋值。示例#import <Foundation/Foundation.h>@interface Person : NSObject- (instancetype)initWithDict:(NSDictionary *)dict;@property (nonatomic, ...
2018-07-07 00:47:03 734
原创 第四章 Runtime应用:实现NSCoding的自动归档和自动解档
用runtime提供的函数遍历Model自身所有属性,并对属性进行encode和decode操作。 通常系统自带的数据类型,如:字典NSDictionary,数组NSArray,字符串NSString,布尔数据BOOL,数字对象NSNumber,NSData,NSDate等可以直接进行存储操作;但是自定义的数据类型,如果直接进行存储操作时,则会抛出异常,这时候就需要进行归档、解档处理。示例代...
2018-07-07 00:33:12 885 1
原创 第四章 Runtime应用:方法转换
swizzling应该只在+load中完成。 在 Objective-C 的运行时中,每个类有两个方法都会自动调用。 1、+load 是在一个类被初始装载时调用; 2、+initialize 是在应用第一次调用该类的类方法或实例方法前调用的。 两个方法都是可选的,并且只有在方法被实现的情况下才会被调用。swizzling应该只在dispatch_once中完成,由于swizzling改...
2018-07-06 23:52:55 262
原创 第四章 Runtime应用:方法添加
方法添加class_addMethod(Class _Nullable cls, SEL _Nonnull name, IMP _Nonnull imp, const char * _Nullable types) 1、cls 被添加方法的类 2、name 添加的方法的名称的SEL 3、imp 方法的实现。该函数必须至少要有两个参数,self,_cmd 4、...
2018-07-06 23:46:31 273
原创 第四章 Runtime应用:关联对象(添加属性)
关联对象(Objective-C Associated Objects)给分类增加属性。关联对象void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)获取关联的对象id objc_getAssociatedObject(id obje...
2018-07-06 23:41:19 391
原创 第三篇 Runtime消息转发
发送消息时会在对应的类对象中搜索方法列表,如果找不到则会沿着继承树向上一直搜索知道继承树根部(通常为NSObject),如果还是找不到并且消息转发都失败了就回执行doesNotRecognizeSelector:方法报unrecognized selector错。消息转发到底是什么呢?接下来将会逐一介绍最后的三次机会。 1、动态方法解析 2、备用接收者 3、完整消息转发动态方法解析 ...
2018-07-06 23:31:57 1145
原创 第二篇 Runtime消息传递
一个对象的方法像这样[obj doing],编译器转成消息发送objc_msgSend(obj, doing),Runtime时执行的流程是这样的: (1)通过obj的isa指针找到它的class; (2)在class的method list找doing(直接在cache里找到,避免去遍历objc_method_list); (3)如果class中没到doing,继续往它的superc...
2018-07-06 22:30:26 146
原创 第一篇 Runtime介绍
Objective-C Runtime Objective-C Runtime Programming Guide Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象、进行消息传递和转发。高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言。使用OC进行面向对象开发,而C...
2018-07-06 22:20:55 191
原创 导航栏控制器的渐变
效果图 实现步骤 1、设置导航栏视图控制器中的navigationBar背景图标[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];2、设置导航栏视图控制器中的navigationBar子视图的背景颜色ba...
2018-07-06 01:42:30 322
原创 修改bounds属性后的效果
UIView中的属性bounds默认的origin是x=0.0,y=0.0,且size中的宽高默认等于frame中size的宽高。当修改了bounds属性中的origin时,会影响到添加到其中的子视图frame中的origin;当修改了bounds属性中的size时,会影响到其自身frame中的size;// 初始化时的frameCGRectMake(20.0, 20.0, 200.0, 200...
2018-07-04 23:15:01 2007
原创 使用工具Hopper对iOSAPP反汇编
HopperHopper Disassembler是Mac上的一款二进制反汇编器,基本上满足了工作上的反汇编的需要,包括伪代码以及控制流图(Control Flow Graph),支持ARM指令集并针对Objective-C的做了优化。Hopper能把二进制文件中的所有函数名,方法名,代码逻辑结构,毫无遮掩的、一览无遗的反汇编。一、安装1、下载dmg文件(有免费试用版本,及购买版本)二、使用1、打...
2018-07-02 21:43:01 3692
原创 使用脚本对代码混淆
一、创建敏感字符文件1、在终端进入当前项目目录2、创建文件:touch codeConfusion.list3、文件添加到项目:Xcode-菜单栏-File-Add Files To 项目名称4、编辑内容,即写入需要混淆的函数名等,如:showMessageclearrandomTime二、创建混淆脚本文件1、在终端进入当前项目目录2、创建脚本文件:touch codeConfusion....
2018-07-02 21:05:23 1818
原创 使用工具Class-dump对iOSAPP逆向
Class-dumpClass-Dump是一款可以导出头文件的命令行工具,该程序用于检查Objective-C运行时信息存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件。官网:http://stevenygard.com/projects/class-dump/一、安装1、下载class-dump安装文件2、双击打开安装3、选择复制文件:class-dump4、粘贴到目录:/硬盘...
2018-07-02 17:15:45 664
Demolimit输入限制
2016-02-15
DemoKVO_KVC
2014-09-03
Notification
2014-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人