随笔分类 -  OC

摘要:如何重写 hash 方法一个合理的 hash 方法要尽量让 hash 表中的元素均匀分布,来保证较高的查询性能。如果两个对象可以被视为同一个对象,那么他们的 hash 值要一样。mattt 在文章 Equality 中给出了一个普遍的算法:- (NSUInteger)hash { // 假设对象有三个属性,那么对这三个属性分别算出 hash 值,然后进行异或运算 return [sel... 阅读全文
posted @ 2020-02-26 13:27 和风细羽 阅读(441) 评论(0) 推荐(0)
摘要:HOOK 译为“钩子”或挂钩。在 iOS 逆向中指改变程序运行流程的一种技术。iOS 中 hook 技术的几种方式Method Swizzle利用 OC 的 Runtime 特性,动态改变 SEL(方法编号)和 IMP(方法实现)的对应关系,达到 OC 方法调用流程改变的目的。主要用于 OC 方法。fishhook它是 Facebook 提供的一个动态修改链接 mach-O 文件的工具。利用 Ma... 阅读全文
posted @ 2020-02-26 13:26 和风细羽 阅读(2756) 评论(2) 推荐(0)
摘要:一、Runtime 简介Runtime 又叫运行时,是一套底层的 C 语言 API,是 iOS 系统的核心之一。开发者在编码过程中,可以给任意一个对象发送消息,在编译阶段只是确定了要向接收者发送这条消息,而接受者将要如何响应和处理这条消息,那就要由运行时来决定了。C 语言中,函数的调用在编译期就会决定调用哪个函数。而 OC 的函数属于动态调用过程,在编译期并不能决定真正调用哪个函数,只有在真正运行... 阅读全文
posted @ 2020-02-26 13:26 和风细羽 阅读(1049) 评论(0) 推荐(0)
摘要:一、iOS hash下图列出 Hash 在 iOS 中的应用分析整理知乎上的一句话:算法、数据结构、通信协议、文件系统、驱动等,虽然自己不写那些东西,但是了解其原理对于排错、优化自己的代码有很大帮助,就好比虽然你不设计制造汽车,但如果你了解发动机、变速器、安全气囊等几项原理,对于你驾车如何省油、延长使用寿命、保证自身安全有很大好处,学而不思则罔、思而不学则殆,开发人员就是个随波而进的行业,无论何时... 阅读全文
posted @ 2020-02-26 13:25 和风细羽 阅读(1445) 评论(0) 推荐(0)
摘要:一、CoreGraphics这是一个 C 语言写就的库,来看看他的头文件:#ifndef COREGRAPHICS_H_#define COREGRAPHICS_H_#include #include #include #include #include #include #include #include #include #include #include #include #include ... 阅读全文
posted @ 2020-02-26 13:24 和风细羽 阅读(581) 评论(0) 推荐(0)
摘要:一、引言 什么是 App ID?Explicit/Wildcard App ID 有何区别?什么是 App Group ID? 什么是证书(Certificate)?如何申请?有啥用? 什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联? 什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)? 什么是(Team)Provisioning Profile... 阅读全文
posted @ 2020-02-26 13:23 和风细羽 阅读(319) 评论(0) 推荐(0)
摘要:一、mach-OExecutable 可执行文件Dylib 动态库Bundle 无法被连接的动态库,只能通过 dlopen() 加载Image 指的是 Executable,Dylib 或者 Bundle 的一种。Framework 动态库和对应的头文件和资源文件的集合Apple 出品的操作系统的可执行文件格式几乎都是 mach-O。mach-O 可以大致分为三部分:Header 头部,包含可以执... 阅读全文
posted @ 2020-02-26 13:23 和风细羽 阅读(787) 评论(0) 推荐(0)
摘要:一、密码学简介1.1 base64Base64 是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。Base64 适用于小段内容的编码,比如数字证书签名、Cookie 的内容等。由于 = 字符也可能出现在 Base64 编码中,但 = 用在 URL、Cookie 里面会造成歧义,所以,很多Base64编码后会把 = 去掉,解码时,需要加上 = 把 Base64 字符串的长度变为 ... 阅读全文
posted @ 2020-02-26 13:22 和风细羽 阅读(836) 评论(0) 推荐(0)
摘要:一、前言在开发过程中,可能遇到服务端返回数据中有 null,当取到 null 值并对 null 发送消息的时候,就可能出现 unrecognized selector sent to instance,导致应用 crash 的情况。针对这种情况,在每次取值的时候去做判断处理又不大合适,在 GitHub上发现了 NullSafe。把这个文件拖到项目中,即使出现 null 的情况,也不会报出 unr... 阅读全文
posted @ 2020-02-26 13:21 和风细羽 阅读(416) 评论(0) 推荐(0)
摘要:一、简介OC在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针。OC在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式。在对象内部保存一个用来表示被引用次数的数字,init、new和copy都会让计数+1,调用release让计数-1。当计数等于0的时候,系统调用dealloc方法来销毁对象。A * a = [[A alloc] init];... 阅读全文
posted @ 2020-02-26 13:21 和风细羽 阅读(1206) 评论(1) 推荐(0)
摘要:一、Apple开发者账号1.1 开发者账号类型个人级公司级企业级公司和企业的可多人协作。在苹果的开发者平台登录后,可在 People 界面邀请其他人员协作开发,邀请的人需要注册一个 appleId 账号,并且可以设置开发人员的权限。1.2 辨别账号类型个人级账户的 Apple Developer Program 下方只有 Certificates,identifiers & Profiles 和 ... 阅读全文
posted @ 2020-02-26 13:20 和风细羽 阅读(882) 评论(0) 推荐(0)
摘要:一、UIResponderapp 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件。UIApplication、UIView、UIViewController 都是继承自 UIResponder 类,可以响应和处理事件。CALayer 继承自 NSObject,不是 UIResponder 的子类,无法处理事件。响应者接收到原始事件数据,必须处理事件或者转发到另一... 阅读全文
posted @ 2020-02-26 13:19 和风细羽 阅读(514) 评论(0) 推荐(0)
摘要:对于iOS程序员来说,内存管理是入门的必修课。引用计数、自动释放等概念,都是与C语言完全不同的。iOS内存管理的核心是引用计数。接触MRC时遇到最头疼的问题就是:为什么那么多release?什么地方需要release?同样初始化一个字符串的两个方法为什么不同,上边一个不需要调用release,后边一个就需要调用release?NSString * str1 = [NSStri... 阅读全文
posted @ 2020-02-26 13:18 和风细羽 阅读(398) 评论(0) 推荐(0)
摘要:一、推送原理当用户打开应用程序的通知中心之后,苹果远程推送服务器就能把消息推送到装有该应用的设备上,具有强制性、实时性的特点,并且用户无需打开应用都能收到推送的消息。1.1 名词介绍Provider:消息提供者,一般是我们的后台服务器或者第三方推送服务器后台APNs(Apple Push Notification service):苹果推送通知服务。APNs Server(Apple Push N... 阅读全文
posted @ 2020-02-26 13:18 和风细羽 阅读(2305) 评论(0) 推荐(0)
摘要:一、类簇类簇是 Foundation 框架广泛使用的设计模式。类簇在公共抽象超类下对多个私有的具体子类进行分组。以这种方式对类进行分组简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。类簇是基于抽象工厂设计模式的。二、抽象工厂抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。很... 阅读全文
posted @ 2020-02-26 13:17 和风细羽 阅读(995) 评论(0) 推荐(1)
摘要:RAM ROMRAM:运行内存,不能掉电存储。ROM:存储性内存,可以掉电存储,例如内存卡、Flash。由于 RAM 类型不具备掉电存储能力(即一掉电数据消失),所以 app 程序一般存放于 ROM 中。RAM 的访问速度要远高于 ROM,价格也要高。App程序启动App 程序启动,系统会把开启的那个 App 程序从 Flash 或 ROM 里面拷贝到内存(RAM),然后从内存里面执行代码。另一个... 阅读全文
posted @ 2020-02-26 13:17 和风细羽 阅读(879) 评论(0) 推荐(0)
摘要:一、库1.1 什么是库?库就是程序代码的集合,将 N 个文件组织起来,是共享程序代码的一种方式。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。1.2 库的分类根据程序代码的开源情况,库可以分为两类开源库源代码是公开的,你可以看到具体实现。比如知名的第三方框架:AFNetworking、SDWebImage。闭源库不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进... 阅读全文
posted @ 2020-02-26 11:36 和风细羽 阅读(2048) 评论(0) 推荐(0)
摘要:一、静态和动态在项目中使用 pod 实现模块化,对于子模块和第三类库的导入方式存在两种:静态库、动态库。当在 podfile 中指定 use_frameworks! 时,子模块和第三方类库将被打包成 .framework 动态库,模块之间的代码不能直接引用,需要添加依赖;反之(默认情况)将打包成 .a 静态库。动态库和静态库的区别:资源加载方式包的大小 编译速度1.1 资源加载方式s.depend... 阅读全文
posted @ 2020-02-26 11:35 和风细羽 阅读(678) 评论(0) 推荐(0)
摘要:一、MVCMVC 全名 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC 被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中... 阅读全文
posted @ 2020-02-26 11:34 和风细羽 阅读(290) 评论(0) 推荐(0)
摘要:一、.a 文件静态库打包打开 Xcode 创建一个新的 Static Library 工程,取名 MyStaticLibrary。创建工程完毕后,系统自动创建了一个同名类,添加一个方法用于测试。#import @interface MyStaticLibrary : NSObject+ (void)test;@end@implementation MyStaticLibrary+ (void)te... 阅读全文
posted @ 2020-02-26 11:33 和风细羽 阅读(783) 评论(0) 推荐(0)