自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 做了4年iOS开发 凭着这个面试题 我从10K到20K

1、NSArray与NSSet的区别?NSArray内存中存储地址连续,而NSSet不连续NSSet效率高,内部使用hash查找;NSArray查找需要遍历NSSet通过anyObject访问元素,NSArray通过下标访问2、NSHashTable与NSMapTable?NSHashTable是NSSet的通用版本,对元素弱引用,可变类型;可以在访问成员时copyNSMapTable是NSDictionary的通用版本,对元素弱引用,可变类型;可以在访问成员时copy(注:NSHashTab

2020-05-21 14:01:53 2540

原创 开源!用Flutter撸了个新浪微博

开源最前线(ID:OpenSourceTop) 猿妹综合整理项目地址:https://github.com/huangruiLearn/flutter_hrlweibo谷歌在2018年12月正式发布了Flutter,这是一个出色的跨平台框架,可用于移动、桌面和 Web 平台构建应用程序,发布不到一年,它的流行度就超过了React Native以及同领域的产品。从下图就可以看出:相比其他选项,Flutter有着许多独有的优势。这些优势融入了基础语言和SDK的设计中,以解决其他技术的常见问题和缺陷,简单

2020-05-30 15:41:34 604

原创 HookZz 一款不一样的 Hook 框架

前言花了有些时间写这个 hookzz 框架. 白话文说下, 单指令的 hook, 无惧短函数和不定参数函数, 可以 hook 指令地址(指令片段), 可以 RuntimeCodePatch, 还有很多其他玩法. Move to HookZz下面直接复制粘贴 README.md 了.HookZzModules 是基于 HookZz 搞得一些模块. 可以在更方便的在 反调试 / hook_objc_msgSend / hook_MGCopyAnswer 做一些工作.如果希望了解原理请 Move to H

2020-05-30 15:08:27 1856

原创 iOS视频添加音乐 去除原声

如果是预览视频,添加音乐这个很简单,使用AVAudioPlayer来播放音乐,目前我所做的是播放导入在工程本地的音乐文件,在线网络音乐添加尚未涉及。视频播放使用AVplayer。 下面是切换背景音乐的方法:-(void)anotherMusic:(NSURL *)url withVolume:(CGFloat)volume{ _usingMusic = YES; _musicUrl = url; _musicPlayer = [[AVAudioPlayer alloc]initWi

2020-05-29 16:16:06 769

原创 Flutter 插件开发:以微信SDK为例

就像 React Native 一样,在 Flutter 应用中,如果需要调用第三方库的方法或者有一些功能需要使用原生的开发来提供,使用 Flutter Plugin 是一种不错的方式,它本质上就是一个 Dart Package,但与其它的 package 不同点在于,Flutter 插件中一般都存在两个特殊的文件夹:android 与 ios,如果需要编写Java、Kotlin或者 Object-C 以及 Swift 代码,我们就需要在这两个文件夹项目中进行,然后通过相应的方法将原生代码中开发的方法映射到

2020-05-29 14:01:58 535

原创 小试 Xcode 逆向:App 内存监控原理初探(逆向技术必看)

前言最近看到公司同事的《iOS内存那些事》系列文章,其中的一篇文章讲了他在研究WebKit中内存管理的时候,发现可以用phys_footprint来衡量内存,其结果和xcode debug显示的值基本一致。文章通读下来,收获颇丰~回味之余,突然脑洞了一下,为啥不直接逆向一下Xcode,学习一下xcode debug app时它是怎么实现内存监控的?刚好最近在自学逆向知识,顺便也来练练手~动手实践准备一个小项目运行一下,我们可以在debug面板看到memory report信息lldb和hoppe

2020-05-28 14:25:26 487

原创 使用 protocol 和 callAsFunction 改进 Delegate指针

2018 年 3 月的时候我写过一篇在 Swift 中如何改进 Delegate Pattern 的文章,主要思想是用遮蔽变量 (shadow variable) 声明的方式,来保证 self 变量可以被常时地标记为 weak。本文中,为了保证没有看过原文的读者能处在同一频道,我会先 (再次) 简单介绍一下这种方法。然后,结合 Swift 5.2 的新特性提出一些小的改进方式。Delegate简单说,为了避免繁琐老式的 protocol 定义和实现,我们可能更倾向于选择提供闭包的方式完成回调。比如在一个

2020-05-27 13:58:48 225

原创 iOS - 启动优化之Clang插桩实现二进制重排

####请大家认真看完前言自从抖音团队分享了这篇 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 启动优化文章后 , 二进制重排优化 pre-main 阶段的启动时间自此被大家广为流传 .本篇文章首先讲述下二进制重排的原理 , ( 因为抖音团队在上述文章中原理部分大多是点到即止 , 多数朋友看完并没有什么实际收获 ) . 然后将结合 clang 插桩的方式 来实际讲述和演练一下如何解决抖音团队遗留下来的这一问题 :hook Objc_msgSend 无法解决的 纯s

2020-05-26 18:56:15 1920 2

原创 使用React Native构建一个App软件

运行react-native init project-name,进入project-name文件夹安装依赖npm i并运行react-native run-android或react-native run-ios构建App。以Android App为例,在Android Studio打开Android文件夹(注意:此处是Android文件夹,不是project-name项目文件夹)。在C:\Users\user\.gradle\wrapper\dists目录下放入对应文件,文件下载地址Gradle.

2020-05-26 14:38:39 273

原创 来教大家如何在Flutter 中玩转 Objective-C Block

dart_native 作为一条比 Channel 性能更高开发成本更低的超级通道,通过 C++ 调用 Native 的 API,深入底层且考虑全面。很多 Objective-C 接口的参数和返回值是 Block,所以这就需要支持用 Dart 语言创建和调用 Objective-C Block。Dart 调用 Objective-C 带 Block 的 APIDart 语言支持协程,这样就无需传递闭包来作为异步调用的回调。而 Objective-C 大量 API 都使用 Block 作为回调,当 Dar

2020-05-25 18:45:51 500

原创 iOS该怎样提高自己能力(程序员必看)

iOS这几年的转换几年间移动互联网的飞速发展以及互联网创业的大潮来袭,使得 iOS 开发一职位炙手可热。由于前几年 iOS 开发的稀缺以及自学门槛相对其他技术高(需要 Mac 和 iPhone),加之创业公司大都以移动端产品作为入口,iOS 开发的薪资也水涨船高。相比其他开发岗位,iOS 开发一职缺口大,薪资高,同时千金难求。培训行业瞄准了时机大力鼓动高校生参加 iOS 开发培训(也不乏一部分其他行业人员进入,非计算机专业的学生更是居多)。培训机构基本上是填鸭式教学,进行简单的 C 语言教学,然后 Obj

2020-05-25 16:32:10 380

原创 WebSocket 双端实践(iOS/ Golang)

一、使用Starscream(swift)完成客户端长链需求首先附上Starscream:GitHub地址第一步:将Starsream导入到项目。打开Podfile,加上:pod ‘Starscream’, '~> 4.0.0’复制代码接着pod install。第二步:实现WebSocket能力。导入头文件,import Starscream初始化WebSocket,把一些请求头包装一下(与服务端对好)private func initWebSocket() {// 包装请求头

2020-05-25 15:41:50 647

原创 今日头条 字节跳动 Flutter架构实践

今日头条 字节跳动 Flutter架构实践1移动跨平台技术探究◆ 为什么需要跨平台?今日头条 字节跳动 Flutter架构实践◆ 跨平台技术是如何发展起来的?今日头条 字节跳动 Flutter架构实践◆ 跨平台技术选型有哪些?今日头条 字节跳动 Flutter架构实践◆ Flutter有什么独特优势(为什么选择Flutter)?今日头条 字节跳动 Flutter架构实践◆ 为什么说Flutter是高性能的,体现在哪里?今日头条 字节跳动 Flutter架构实践2Flut

2020-05-25 15:19:32 1404

原创 【整理之路二】百度地图的路径规划和调用本机地图导航

推荐看完之后注意一下最后的东西一、细说百度地图的路径规划路径规划主要有这么几种1.公交路径规划1.1 市内公交规划(暂时不在这里说)1.2 跨市/省公交规划 // 导入头文件 #import <BaiduMapAPI_Search/BMKSearchComponent.h> #import <BaiduMapAPI_Map/BMKPolylineView.h> #import <BaiduMapAPI_Utils/BMKGeometry

2020-05-25 14:29:14 1316

原创 腾讯开源内部跨端框架 Hippy,打磨三年,日均 PV 过亿

12月20日,腾讯开源跨端框架 Hippy。 在腾讯内部,Hippy 已运行3年之久,跨 BG 共有 18 款线上业务正在使用 Hippy,日均 PV 过亿,且已建立一套完整生态。相较于其他跨端框架,Hippy 对前端开发者更友好:紧贴 W3C 标准,遵从网页开发各项规则,使用 JavaScript 为开发语言,同时支持 React 和 Vue 两种前端主流框架。业内现状:大部分跨端框架对前端开发者不够友好“跨端”是目前前端界比较流行的一个词汇。“跨端”之所以流行,根源在于传统网页开发受浏览器能力限制太

2020-05-23 18:47:56 791

原创 Flutter 10天高仿大厂App及小技巧积累总结

以下博文会分为3个部分概述:项目结构分析项目功能详细概述(所用知识点)小技巧积累总结项目结构分析其次,梳理下项目的目录结构,理解每个文件都是干什么的,我们先来看看一级目录,如下:├── README.md # 描述文件├── android # android 宿主环境├── build # 项目构建目录,由flutter自动完成├── flutter_ctrip.iml├── fonts # 自己创建的目录,用于存放字体├── images # 自

2020-05-23 14:58:44 534

原创 最新iOS大厂面试题大全

1. ARC帮我们做了什么?使用LVVM + Runtime 结合帮我管理对象的生命周期LVVM 帮我们在代码合适的地方添加release、retarn、autorelease等添加计数器或者减少计数器操作Runtime 帮我们像__weak、copy等关键字的操作2.initialize和load是如何调用的?它们会多次调用吗?load方法说在应用加载的时候,Runtime直接拿到load的IMP直接去调用的,而不是像其他方式根据objc_msgSend(消息机制)来调用方法的load_ima

2020-05-22 16:19:17 1085

原创 Flutter中 EasyLoading - 让全局Toast或Loading更简单

前言Flutter是Google在2017年推出的一套开源跨平台UI框架,可以快速地在iOS、Android和Web平台上构建高质量的原生用户界面。Flutter发布至今,不可谓不说是大受追捧,吸引了大批App原生开发者、Web开发者前赴后继的投入其怀抱,也正由于Flutter是跨平台领域的新星,总的来说,其生态目前还不是十分完善,我相信对于习惯了原生开发的同学们来说,找轮子肯定没有了那种章手就莱的感觉。比如说这篇文章即将讲到的,如何在Flutter应用内简单、方便的展示Toast或者Loading框呢?

2020-05-22 15:10:49 3223

原创 【Flutter应用】Flutter精仿抖音开源

flutter_tiktokFlutter精仿抖音开源了,左滑搜索,右滑个人中心,上下滑动刷视频,双击点赞冒爱心,无敌精仿,感谢点Star。应用截图实现功能上下刷视频,视频会自动加载封面左右滑动去搜索与个人中心双击冒爱心点赞看评论切换底部Tabbar因为技术大家聚在一堂 因为交流才会帮助我们解决很多问题 这是一个我的iOS交流群:651612063 进群密码111,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!项目结构依赖:加载

2020-05-22 13:43:04 1383 1

原创 Flutter学习指南App,大家可以来玩玩

Flutter是谷歌的移动UI框架,可以快速在iOS、Android、Web和PC上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。同时它也是构建未来的Google Fuchsia应用的主要方式。从事移动开发这么多年, 各种跨平台技术层出不穷.从最初的基于web的phonegap/cordova到后来的原生组件渲染react-native/weex,再到现在的flutter通过自己开发了一套

2020-05-21 16:38:13 503

原创 抓包工具Charles的使用心得

简介Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够在Windows,Mac,Linux上使用。开发iOS都在Mac系统上吧,安装Charles的时候要先装好Java环境。这么好的软件不是免费的,官网要好几十刀呢,我这里有一个Mac上的破解版,点击这里下载,当然不是最新版的。如果你想体验最新版,Charles是提供试用的。Charles主要功能支持SSL代理。可以截取分析SSL的请求。支持流量控制。可以模拟慢速

2020-05-21 14:41:59 277

原创 iOS制作暗黑模式教程

0、前言随着iOS13的普及,大多数的APP都已经适配了暗黑模式,网络上关于暗黑模式适配的文章也很多,基本看几篇就能解决掉iOS13暗黑模式的适配。我看了大部分的文章,基本都是对暗黑模式通用的介绍和适配,一些实际项目中的具体细节却很少提及,所以此篇文章算是对于其他暗黑模式适配的补充,力求能做到完美适配暗黑模式。PS:如果你没看过其他的暗黑模式适配文章,那么你在看此文章前需要先去看一下其他关于暗黑模式适配的文章,此文章默认你是已经知道暗黑模式需要怎么适配了的。1、LaunchScreen.storyboa

2020-05-20 14:31:17 964

原创 三种项目中很常见的提示小弹窗

我们在开发项目的时候,可能会遇到各种样式的弹窗,并且每个项目的弹窗样式都会千差万别。但是不管他们的样式再怎么变化,只要我们掌握了核心的自定义弹窗方法,那么我们都会很快就能实现这些样式的弹窗的。今天的主要内容是实现在项目中三种比较常见的提示信息的小弹窗。 效果图如下:Simulator Screen Shot - iPhone 11 Pro Max - 2020-04-29 at 12.28.30.pngSimulator Screen Shot - iPhone 11 Pro Max - 2020-.

2020-05-20 13:44:27 516

原创 Swift5 + MVVM + 文艺复兴微博(纯代码)

背景: 现在越来越多的公司会尝试用 Swift 做 native 的开发了,很多之前习惯用 Objective-C 的开发,有新项目启动的时候,也会想说用 Swift 试试。如果从 2020年编程语言排行榜 上看的话,Swift的热度也领先 Objective-C 10个身位了。而我们现在公司所做的项目,也是用 Swift 开发的,虽然说之前有些 OC 基础,写起 Swift 功能也是能实现,但是代码不是很优雅,不够 ‘Swift Style’。 熟练度不够的话,很多 Swift 的高级

2020-05-19 15:21:30 614

原创 Dart+Flutter聊天实例|flutter仿微信界面聊天应用

Flutter 是 Google 开源的 UI 框架,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。 相比较目前的混合开发方案,Flutter 提供了大量的文档,能非常快速且友好的让你加入到这个大家庭,针对移动端,Flutter 提供了符合 Android 风格的 Material 和符合 iOS 风格的 Cupertino,同时对不同平台也做了不同的兼容。 感兴趣的同学可以关注 GitHub:https://github.com/flutter/flutter今天

2020-05-19 13:55:45 2032

原创 iOS的UI组件

我也是一个ios的技术人员最近有时间的时候把iOS里的UI组件重新整理了一遍,简单来看一下常用的组件以及它们的实现。其实现在这些组件都可以通过Storyboard很快的生成,只是要向这些组件能够变得生动起来并且赋予它们更具生命力的事件,还是需要一番功夫的。UIButton这个就不多说了,对照文档可以更多的去学习。所以在学习这些组件的时候最好的方式还是通过文档,虽然已开始可能有些困难,但是硬着头皮去啃,就一定会有悟道的那一天。建议有问题先去看文档,如果实在不行再去Google啊,Stack Overfl

2020-05-18 16:04:30 509

原创 iOS性能优化内容

先来谈谈CPU和GPU在屏幕成像的过程中,CPU和GPU起着至关重要的作用CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间通 讯的数据、控制及状态的总线。GPU全称为Graphics Processing Un

2020-05-18 15:54:47 216

原创 通用的App都会有哪些运行状态

状态:未运行,未激活,激活,后台,挂着。未运行:程序未启动未激活:程序在前台运行,不过没有接受到事件。激活:程序在前台运行且受到了事件。后台:程序在后台而且能执行代码,大多程序进入这个状态后会在这个状态停留一会,时间到之后会进入挂起状态。挂起:程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中,系统内存低时,系统就把挂起的程序清除掉。各个程序运行状态时代理的回调:(BOOL)application:(UIApplication *)appl

2020-05-18 14:18:36 637 1

原创 KVO 实现观察者模式

前言在 iOS 开发中,常常需要在不同的对象、不同的视图(View)或不同的视图控制器(ViewController)之间通信,传递数据。主要的实现方法有:  * 直接通过 superView 或 subView 传递数据,或者在类中添加其他对象的引用。方法直接但效率低、容易使代码混乱,难以处理复杂的关系。  * 通过自带的或自定义的delegate协议通信。效率较高,能完成复杂的通信及执行复杂的操作,代码结构较好,但是代码量比较大。  * 使用 KVO(Key-va.

2020-05-16 18:38:50 384

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除