![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发的底线
文章平均质量分 92
iOS大鑫
这个作者很懒,什么都没留下…
展开
-
OC与Swift API的交互!
互用性是让 Swift 和 Objective-C 相接合的一种特性,使你能够在一种语言编写的文件中使用另一种语言。当你准备开始把 Swift 融入到你的开发流程中时,你应该懂得如何利用互用性来重新定义并提高你写 Cocoa 应用的方案。互用性很重要的一点就是允许你在写 Swift 代码时使用 Objective-C 的 API 接口。当你导入一个 Objective-C 框架后,你可以使用原生的 Swift 语法实例化它的 Class 并且与之交互。初始化为了使用 Swift 实例化 Object原创 2021-06-23 15:25:13 · 190 阅读 · 0 评论 -
Swift与Objective-C和Cocoa混合编程的基本设置!
重要事项:这篇文章初步介绍了在开发中用到的 API 或技术。苹果公司提供这些信息来帮助您规划本文所说明的技术和接口以用于苹果的产品上。这些信息会改变,并且根据这篇文章所实现的软件应该在最新的操作系统并根据最新的文档测试。本文档的新版本,可能在未来通过技术和 API 的 seeds 版本来提供Swift 被设计用来无缝兼容 Cocoa 和 Objective-C 。在 Swift 中,你可以使用 Objective-C 的 API(包括系统框架和你自定义的代码),你也可以在 Objective-C中 ..原创 2021-06-22 19:14:00 · 190 阅读 · 0 评论 -
iOS开发-Swift进阶之泛型!
swift进阶总汇本文主要介绍泛型及其底层原理泛型泛型主要用于解决代码的抽象能力 + 代码的复用性例如下面的例子,其中的T就是泛型func test<T>(_ a: T, _ b: T)->Bool{ return a == b}//经典例子swap,使用泛型,可以满足不同类型参数的调用func swap<T>(_ a: inout T, _ b: inout T){ let tmp = a a = b .原创 2021-06-15 15:48:49 · 297 阅读 · 4 评论 -
iOS开发-Swift进阶之协议Protocol!
swift进阶总汇本文主要分析protocol的用法及底层存储结构协议的基本用法【语法格式】:协议的语法格式//协议的语法格式protocol MyProtocol { //body}class、struct、enum都可以遵守协议,如果需要遵守多个协议,可以使用逗号分隔//1-2、class、struct、enum都可以遵守协议,如果需要遵守多个协议,可以使用逗号分隔struct CJLTeacher: Protocol1, Protocol2 { //b.原创 2021-06-12 15:38:54 · 315 阅读 · 4 评论 -
iOS开发-Swift进阶之访问控制权限!
swift进阶总汇主要介绍swift中的访问控制权限关键字private1、private:访问级别仅在当前定义的作用域内有效(单例中使用过)//8-1、private:访问级别`仅在当前定义的作用域内有效class CJLTeacher{ static let shareInstance = CJLTeacher() private init(){}}var t = CJLTeacher.shareInstancefilePrivatefilePrivate:访问.原创 2021-06-10 15:56:15 · 336 阅读 · 1 评论 -
iOS开发-Swift进阶之可选类型Optional & Equatable+Comparable协议!
swift进阶总汇本文主要分析Optional源码、Equatable+Comparable协议Optional分析swift中的可选类型(Optional),用于处理值缺失的情况,有以下两种情况有值,且等于x没有值这点可以通过swift-source->Optional.swift源码(CMD+P,搜索Optional)源码来印证@frozenpublic enum Optional<Wrapped>: ExpressibleByNilLiteral {.原创 2021-06-08 14:49:49 · 351 阅读 · 0 评论 -
iOS开发逆向之代码注入(上)
本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入代码注入一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。查看Mach-O文件在了解注入前,我们首先需要了解ipa包中的静态库是如何注入的,有以下两种方式查看Mach-O可执行文件1、终端命令:otool -l WeChat2、MachOView 二进制文件分析工具(注:分析时可能出现无法分析的情况,可以通过 CMD + o 打开)Mach-O文件中主要看原创 2021-05-20 14:53:21 · 690 阅读 · 0 评论 -
移动开发逆向之应用重签名(上)
本文主要介绍重签名的几种方式,以及如何对应用进行重签名,应用重签名从之前《iOS逆向应用签名》中可知,签名是指原始数据的Hash值解密。那么重签名,顾名思义,就是指将原始数据的Hash值重新加密。作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)本次介绍的应用重签名方式主要有以下几种:C原创 2021-05-18 14:45:14 · 320 阅读 · 2 评论 -
iOS开发逆向之应用签名!
本文主要讲解什么是代码签名,以及iOS中的应用签名代码签名代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已.目的:防止可执行文件或脚本被篡改简单的代码签名在iOS出来之前,以前的主流操作系统(Mac/Windows)软件随便从哪里下载都能运行,系统安全存在隐患,盗版软件,病毒入侵,静默安装等等.那么苹果希望解决这样的问题,要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,怎样保证呢?就是通过代码原创 2021-05-17 14:42:03 · 224 阅读 · 0 评论 -
iOS逆向之对称算法(上)
本文主要介绍对称算法的基本概念对称加密对称加密加密、解密使用的是同一个key,即使用同一个密钥加密的方式对称加密过程明文通过密钥加密得到密文密文通过密钥解密得到明文对称加密优点加密计算量小速度快适合对大数据进行加密的场景对称加密的缺点密钥传输问题:因为加解密使用的是同一个密钥,所以如何安全的把密钥传输到解密者手里是一个关键。在实际应用中,一般是客户端想服务器请求对称加密的密钥,而且密钥还需要使用非对称加密后再传输密钥管理问题:因为每个用户都原创 2021-05-14 22:24:13 · 168 阅读 · 0 评论 -
iOS逆向之RSA加密(上)
本文主要介绍RSA的数学原理、以及RSA的代码演示引子密码学是指研究信息加密、破解密码的技术科学。最早可以追溯到追溯到2000年前。而当今的密码学是以数学为基础的。密码学发展史在1976年以前,所有的加密方法都是同一种模式:加密、解密使用同一种算法。在交互数据的时候,彼此通信的双方就必须将规则告诉对方,否则没法解密。那么加密和解密的规则(简称密钥),它保护就显得尤其重要。传递密钥就成为了最大的隐患。这种加密方式被成为对称加密算法(symmetric encryption algorithm)原创 2021-05-11 15:36:47 · 267 阅读 · 0 评论 -
iOS逆向之OC反汇编(下)
本文主要理解OC对象反汇编,以及block常见类型的反汇编OC反汇编创建一个Person类,并在main函数中初始化一个Person对象@interface Person : NSObject@property(nonatomic, copy) NSString *name;@property(nonatomic, assign) int age;+ (instancetype)person;@end@implementation Person+ (instancetype)p原创 2021-05-10 16:02:18 · 386 阅读 · 0 评论 -
iOS逆向之OC反汇编(上)
本文主要讲解编译器的优化以及指针的汇编编译器优化设置可在项目的BuildSetting->Optimization Level中找到,一般的优化方案选择FS(Fastest,Smallest)案例分析有以下代码int main(int argc, char * argv[]) { int a = 1; int b = 2;}在没有优化情况下的汇编如下将优化方案从None改成FS,汇编如下修改1:main中调用int sum(int a,原创 2021-05-08 15:09:36 · 404 阅读 · 0 评论 -
iOS逆向:函数本质02(下)
本文主要是讲解函数的参数、返回值、局部变量在汇编中是如何存储,以及CPSR标志寄存器函数的参数和返回值arm64下,函数的参数是存放在x0-x7(w0-w7)这8个寄存器里面的,如果超过8个参数,就会入栈如果自定义函数时,参数最好不要超过6个(因为有两个隐藏参数 self,_cmd)如果函数需要多个参数,可以传入数组、结构体、指针等类型函数的返回值放在x0寄存器中如果返回值大于8个字节,就会利用内存传递作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个原创 2021-05-05 14:32:59 · 167 阅读 · 8 评论 -
iOS逆向:函数本质(上)
本文的主要目的是理解函数栈以及涉及的相关指令在讲函数的本质之前,首先需要讲下以下几个概念栈、SP、FP常识栈栈:是一种具有特殊的访问方式的存储空间(即先进后出 Last In Out First, LIFO)高地址往低地址存数据(存:高-->低)- 栈空间开辟:往低地址开辟(`开辟:高-->低`)复制代码SP和FP寄存器SP寄存器:在任意时刻会保存栈顶的地址FP寄存器(也称为x29寄存器):属于通用寄存器,但是在某些时刻(例如函数嵌套调用时)可以利用它保.原创 2021-05-04 15:37:51 · 268 阅读 · 0 评论 -
iOS逆向 :初识汇编
在逆向开发中,非常重要的一个环节就是静态分析,众所周知,手机上安装App其本质是一个二进制文件,而静态分析是建立在分析二进制上面的。所以在学习逆向之前,需要提前了解相关的汇编知识汇编语言的发展机器语言是由0和1组成的机器指令,表示特定的功能,如下所示加:0100 0000减:0100 1000乘:1111 0111 1110 0000除:1111 0111 1111 0000汇编语言(assembly language)由于使用机器语言表示时不方便记忆,于是开始使用助记符来代替机器语言,,例原创 2021-04-30 14:40:07 · 294 阅读 · 0 评论 -
iOS高级进阶系列之-库(上)静态库探索
补充我们对符号应该有一定的认识,这里再补充点关于符号的内容。我们有时候需要知道符号的种类,我们通过命令nm -pa 文件名 来查看符号我们看到地址后面有t、d、T等关键字,这些关键字就是符号种类,下面整理了一下符号种类划分命令查找上面用到命令-pa,这里我们来说下-pa的含义,-pa其实包含两部分,-p、-a,我们可以通过查看命令符号查看1.在终端输入man nm,来到name list2.向下滚动,查找-p,-a我们可以知道-a:显示所有符号表项,包括插入的使用调试器。-原创 2021-04-29 15:10:52 · 243 阅读 · 0 评论 -
OC底层面试知识点之 —— Block底层原理
本文将介绍block的类型,循环引用的解决方法以及block底层分析Block简介Block定义:带有自动变量的匿名函数,它是C语言的拓展功能,之所以是扩展,是因为C语言不允许存在这样的匿名函数匿名函数匿名函数式指不带函数名称的函数带有自定变量Block拥有捕获外部变量的功能,在Block中访问一个外部的局部变量,Block会持有它的临时状态,自动捕获变量值,外部局部变量的变化不会影响它的状态(这个下面会讲到)。Block类型作为一个开发者,有一个学习的氛围跟一个交流圈子原创 2021-04-24 14:02:37 · 568 阅读 · 0 评论 -
OC基础知识点之-KVC(键值编码)!
KVC定义KVC的全称是Key-Value Coding,中文就是我们所熟知的键值编码,键值编码是NSKeyValueCoding非正式协议启用的一种机制。对象采用该协议来间接访问该对象属性(既:可以通过一个key值来访问)。这种间接访问机制补充了实例变量及其相关的访问器方法所提供的直接访问.KVC常用API常用方法1.通过key设值/取值2.通过keyPath来设置/取值其它相关方法KVC设值及底层原理在日常开中,我们经常用的赋值就是setter方法或者用KVC进行赋值,如原创 2021-04-23 14:48:32 · 626 阅读 · 0 评论 -
OC底层面试题-组件化通信(下)
上篇我们知道了如何创建组件化项目,这篇我们来聊聊组件化的重点:组件化通信组件化通信方法目前所了解的主流方式有一下三种:1.URL路由2.target-action3.protocol匹配协议试编程在编译层面使用协议定义规范,实现在不同地方,从而达到分布管理和维护组件的目的。这种方式也遵循了依赖反转原则,是一种很好的面向对象编程的实践。但是方案也很明显:由于协议式编程缺少统一调度层,导致难于集中管理,特别是项目规模变大、团队变多的情况下,架构管控就会显得越来越重要。协议式编程接口定原创 2021-04-22 13:57:46 · 312 阅读 · 1 评论 -
浅谈iOS进阶路线,让自己人生不迷茫!
前言这里大鑫,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用网路记录下自己的学习历程.本文阅读建议1.一定要辩证的看待本文.2.本文仅代表个人片面观点,如有不同观点,还往及时指出.3.本文只阐述学习路线和学习当中的重点问题.需要读者自己使用百度进行拓展学习.4.本文所表达观点并不是最终观点,还会更新,因为本人还在学习过程中,有什么遗漏或错误还望各位指出.5.觉得哪里不妥请在评论留下建议~6.觉得还行的话就点个小心心鼓励下我吧~.原创 2021-04-16 12:08:51 · 507 阅读 · 0 评论 -
面试专题—iOS内存不够怎么办?底层原理
在早期的计算机中,程序是直接运行在物理内存上的,也就是说:程序在运行时访问的地址就是物理地址。这样也就是单运行的时候没有什么问题!可是,计算机会有多到程序、分时系统和多任务,当我们能够同时运行多个程序时,CPU的利用率将会比较高。那么有一个非常严重的问题:如何将计算机的有限的物理内存分配给多个程序使用假设我们计算有128MB内存,程序A需要10MB,程序B需要100MB,程序C需要20MB。如果我们需要同时运行程序A和B,那么比较直接的做法是将内存的前10MB分配给程序A,10MB~110MB分配给B.原创 2021-04-05 13:43:08 · 137 阅读 · 0 评论 -
iOS开发的底线
iOS开发的底线数组越界NSArray *firstNames = @[@“Roy”, @“Mike”, @“Jordan”];NSString *name = firstNames[3]; // 崩溃崩溃信息:**** Terminating app due to uncaught exception ‘NSRangeException’, reason: ‘*** -[__NSArrayI objectAtIndexedSubscript:]: index 3 beyond bounds [0转载 2021-02-24 21:33:47 · 229 阅读 · 0 评论