自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mo_Mo123的博客

没有描述

  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 alias

【代码】alias。

2023-12-19 15:12:03 336

原创 调用被fishhook的原函数

通过手段获取系统原函数并调用

2023-08-17 19:07:58 235

原创 ios如何进行启动崩溃保护

网传上个月下旬小红书因为配置问题导致连续性启动崩溃,最终只能通过紧急发版解。何为保护?要保护什么?该怎样保护?带着这几个疑问,一一谈一下个人的见解。

2023-08-09 14:40:32 273

原创 iOS中__attribute__的使用

通过__attribute编译期指令将数据注册至Mach-O指定段的section,可以提供更灵活的注册方式,避免了非必要依赖。通过这种方式不仅仅能够在任何地方注册string,甚至可以注册C函数。两种形式,鉴于OC中string极高的灵活性能够实现绝大部分需求(比如:转成protocol、class、selector等),因此实现并未支持注册C函数。下面的库提供了注册和读取内容的简单方式,主要支持。

2023-07-19 16:40:33 517

原创 iOS无用类统计方案

基于initialize/用户实际操作的无用类统计方案

2023-04-14 16:53:16 747

原创 pod库报C++头文件file not found问题

记录个问题:项目中引入引入MLNKV后,编译报错。以下为修改了MLNKV的podfile的结果,podfile中打开了use_frameworks!这是个找不到c++头文件问题,经过和项目对比发现只有在podfile中使用use_frameworks!会引起此现象,Google查阅到这篇文章,表明原因是暴露了C++头文件,只需要在podspec中把包含C++头文件的header文件设置为private,或者将该类头文件从public header中移除即可。因外部不需要访问MLNKVBase等,因

2021-12-25 21:01:51 2532

原创 利用runtime获取工程内的所有类

【记个代码】不包含系统类// 获取工程里的所有类- (NSArray <NSString *>*)getResourceClassNames { NSArray *(^block)() = ^(const char *imageName) { unsigned int classCount; const char **classes = objc_copyClassNamesForImage(imageName, &classCount);

2021-12-14 11:38:23 2004

原创 iOS 准确获取app进程启动时间点

debug环境下打印启动耗时环境变量设置EditSchema -> Run -> Arguments -> Environment Variables添加DYLD_PRINT_STATISTICS和DYLD_PRINT_STATISTICS_DETAILS值均为1其中DYLD_PRINT_STATISTICS打印信息如下:Total pre-main time: 203.41 milliseconds (100.0%) dylib loading time: 1

2021-04-12 14:47:31 1395

原创 Mac终端显示git分支问题处理

百度一下具体操作,一般是在.bashrc中添加一段代码,然后通过source命令执行该文件。今天拿到一台别人用过的Mac,遇到了不生效的问题。解决方案如下:通过echo $0查看shell 版本,如果输出不是/bin/shell说明你也中枪了修改系统默认shell chsh -s /bin/bashsource ~/.bashrc重启终端...

2021-01-23 11:02:54 282

原创 Lua基本语法

本篇要聊的分为两部分,一部分是运算符,另一部分是基本语法。Lua的运算符概况一元运算符:- 负号,实数符号取反(注:Lua中没有++和–)二元运算符:+ 加, - 减, * 乘, / 除, ^幂运算,% 取余关系运算符:> 大于,< 小于,>= 大于等于,<= 小于等于,== 等于 ,~= 不等于(注:不等于是~=)逻辑运算:or 或;and 与;not 非 (注:Lua中的逻辑运算符不是||、&&和!)位运算:(注:仅MLN中中有效

2020-05-10 15:12:37 2168

原创 Lua数据类型

lua入门的系列文章于2019年初诞生于陌陌公司内部的文档系统,目的是为公司内部的lua新人培训而做。2020年疫情期间想做些mln的推广,便转至公众号。佛系一段时间后觉得公众号受众面比较窄,遂转移至scdn,希望能帮助更多的人快速了解和掌握MLN这一跨平台技术。一下正文Lua是用C编写的一个小巧轻量级的脚本语言,所以我们通常也将Lua程序称为Lua脚本。lua有以下一些特性:轻量级易扩展支持面向过程、面向对象和函数式编程自动内存管理语言内置模式匹配、闭包函数可作为值传递支持模拟多线程

2020-05-10 14:09:55 351

原创 MLN —— 支持热更的移动跨平台解决方案

这里写自定义目录标题MLN简介MLN的原理MLN的优势什么是LuaMLN的学习成本MLN简介经历了两年多的打磨及开发实践,MLN终于开源了,git地址MLN是陌陌技术团队开源的移动跨平台开发框架,因其较低的学习成本、较高的人员效率、良好的性能、支持线上热更新等优势,目前在陌陌App中已全面替换weex,成为唯一在用的跨平台方案,并广泛应用于多种业务场景。MLN的历史追根溯源应是来自于阿里的...

2020-02-03 13:24:46 4388 1

原创 Lua实现switch-case

switch是啥?别多想,不是年会发的那玩意儿 !Lua君说:虽然我没有case,但是我有switch啊,而且你还可以随意改名字,比如你爱慕已久的CuiHua~实际上switch同学像是一个表,丢给它一个a,它就把case:a对应的地址给你,丢给它一个b,它就把case:b对应的地址给你,丢给它一个c,人家说,不好意思啊哥,我这儿没有c,就走default了哈~既然是这样,我们就造个这样的表...

2019-05-11 20:20:02 3584

原创 Lua继承的实现

最简单的继承-- 创建Person表,默认有name,gender,age三个属性以及一个cry()方法Person = {name = "小明", gender = "F", age = 18}function Person:cry() print(self.name, "crying... @.@")end-- 创建per空表per = {}-- 让per继承Pe...

2019-02-11 12:21:33 505

原创 ios app获取LaunchImages中的图片

遇到一个需求,读取LaunchImages中的图片作为一个VC的背景图,搜罗一圈没找到靠谱的解决方案。 下面的代码可以解决,暂时还没有遇到问题,只是感觉不太好。如果有更好的方案,请留言告知,在此先道一声感谢! NSDictionary * infoPlist = [[NSBundle mainBundle] infoDictionary]; NSArray * arr ...

2018-05-25 18:03:49 533

原创 用系统方法实现网易云音乐VC翻转动画

翻转动画仅仅是VC切换动效的一种,通过此方法可以方便的实现VC切换的各种动效。思路: MasterVC作为根视图控制器 AAVC和BBVC之间切换均通过MasterVC进行。 MasterVC作为视图控制器的容器,AAVC和BBVC作为子控制器放在容器中类似网易云音乐VC翻转的核心代码: [self addChildViewController:self.bb]...

2018-05-17 18:32:00 680

原创 iOS PanGesture和ScrollView的手势冲突解决方案

之前撸k线,k线视图作为一个子控件被放在了ScrollView上,由于k线有个左右滑动的手势,于是使用了UIPanGestureRecognizer,这导致了在K线上上下滑动时ScrollView没有任何相应,在交互上不太友好。因此本内容主要是为了处理UIScrollView的子视图上添加UIPanGestureRecognizer后,导致上下滑动该子视图时UIScrollView无法跟随上下...

2018-05-15 11:19:46 4089 1

原创 iOS 极其简单的夜间模式实现方案 附开源库

前言开发过程中也许会遇到需要切换不同色系皮肤模式的需求,例如夜间模式切换,股票红涨绿跌的切换等。 单纯的从技术角度讲,这个功能实现起来并没有技术难点,最基本的做法是切换模式的时候抛个通知,VC或View收到通知后更改颜色图片等。虽然技术不难,但是实现难度相对较大,毕竟很琐碎,而且平白增加了很多控制代码,严重影响代码的可读和可维护性。带着把对系统的影响降到最低的目标,我们想到了利用...

2018-04-20 17:08:40 2101 1

原创 iOS 获取系统音量大小

#import &lt;AVFoundation/AVFoundation.h&gt;AVAudioSession *audioSession = [AVAudioSession sharedInstance];CGFloat currentVol = audioSession.outputVolume; //@property (readonly) float outputVolum...

2018-03-01 16:38:27 7807 1

原创 iOS UILabel字符串点击响应

最近接到一个需求,给一段文字,可能需要对文字中的某个词语添加交互事件,触发后进行名词解释。设计如下: 有网友说用text view,把需要交互的字符当作url处理,可这样以来,必须打开text view的selectable属性,这不是我想要的。于是考虑用UILabel,因为之前用过TTTAttributedLabel。TTT这个东西可以根据你的配置自动去做正则,找出你需要匹配的电话号码、url等

2018-02-01 11:29:28 4257

原创 iOS 判断两个时间是否属于同一时期

判断两个时间是否属于同一天,同一周,同月

2018-01-19 11:38:46 1387

原创 OC 优先级排序方法

最近比较忙,忙着处理k线相关的各种需求,三个工程一起撸,好不酸爽~排序,大家都用过,这里要介绍一个大多数人都不知道的方式,先买个关子——这种排序方式很牛。它之所以牛,是因为它完美的且优雅的处理了包含潜在优先级条件的排序。 简单的几行代码就可以实现对数组按照条件优先级进行排序。 比起冒泡,比起block方便得不止一星半点。栗子如下,一看便懂^o^- (NSMutableArray *)sortAr

2017-11-23 20:34:59 2085

原创 iOS block之循环引用

此篇博文用到了上一篇的一些知识点,有需要了解可以点此链接《iOS block之三种block》前言首先还是从一个大家耳熟能详的循环引用的条件说起:有3个对象A、B、C,当A强引用B,B强引用C,C又一不小心强引用了A,就出现了循环引用。 举个常见的栗子如下: 上面的栗子中,A代表一个vc,B代表一个view,它是vc的property,C是个block,它是view的property。 A强引

2017-09-10 22:37:56 1195

原创 iOS block之三种block

本篇博文主要根据block在内存中存在的位置介绍block的种类以及其生命周期等特性

2017-09-10 18:04:02 2609 2

原创 iOS 使用UICollectionView实现轮播图

一般来说实现轮播图的基础控件有两个,UIScrollView或UICollectionView,二者选一,我更愿意用UICollectionView,至于原因,读者们发挥想象力吧,我只是在看轮播图的时候第一个就想到了UICollectionView,仅此而已。既然第一个想到的是UICollectionView,那它对我来说应该就是最合适的。思考一下下面的问题,然后撸代码吧。 问题1 怎样

2017-09-03 18:09:22 3851

原创 iOS title view不居中的处理办法

这篇文章没有代码,但相信看完之后您就会轻松的解决您所遇到的问题。做iOS开发的朋友们可能会遇到自定义导航栏上的left item,right item和title的情况,这种情况下容易出现一个问题,就是title不局中。在我解决此问题之前也在网上搜了很多次,但是一直没有遇到比较好的解决办法,因为几乎所有的楼主都是说,拿屏幕宽度减去这个,再减去那个,这种方法简直傻子都能想出来,所以参考意义不大。 本

2017-08-20 21:22:45 1913 1

原创 iOS KVC-对象初始化赋值的神级技巧

网络请求之后最重要的一步就是把字典数据转化成类对像了,这一步很简单,但通常也异常繁琐,因为为了使程序健壮,我们首先会判断字典中是否存在这个key对应的value,如果存在则赋值,不存在则跳过。此篇文章将给出一个比较简单的初始化类对象的技巧,应用场景是最常见的通过字典数据初始化类对像。原理是通过KVC提供的- (void)setValuesForKeysWithDictionary:方法达到快速初始化

2017-07-06 00:21:57 790

原创 iOS 设备型号对照表

// *** other ***"i386" "Simulator" (模拟器)"x86_64" "Simulator" (模拟器)// *** iPhone ***"iPhone1,1" "iPhone 1G""iPhone1,2" "iPhone 3G""iPhone2,1" "iPhone 3GS""iPhone3,1"

2017-07-05 14:02:19 2923

原创 iOS 聊天输入框跟随键盘运动动画实现

在上家公司做项目的时候,布局使用的是Masonry,常用的位置变换的动画就是约束动画啦,也就是更新某一控件的约束之后在UIView 的animationWithDuration:animations:方法中调用该控件的layoutIfNeeded方法。 诚然这种效果非常一般,动画一般是线性的,也就是说动画的UIViewAnimationOptions是UIViewAnimationOptionCu

2017-03-24 21:15:22 4075 1

原创 iOS -setValue:forKey:和-setObject: forKey区别

首先看一下下面的代码,请问程序是否会崩溃?如果不会,那么输出结果应该是什么?NSMutableDictionary * dic = [@{@"name":@"小明"} mutableCopy];[dic setObject:@"Men" forKey:@"gender"];[dic setValue:nil forKey:@"gender"];NSLog(@" -- %@ -- ",dic);

2017-03-22 10:48:42 2853 2

原创 我的iOS开发经验总结

软硬件环境 首先把软硬件环境配置妥当,Xcode配置好自己喜欢的字体,颜色,当然还有快捷键。 软件环境: 其他必不可少项: - Cocoa pods- 管理第三方开源库 - Source Tree(如果你有玩git的话,可以用它来查看分支和提交记录啥的) - Visualjmon和VisualXML(做网络开发前测试接口工具) - Datum Free(用于玩转数据库)

2017-03-15 22:57:28 568

原创 iOS cell高度自适应 - 教你写出优雅的table view

作为一个iOS开发者,自然少不了了table view打交道,table view中最令人头疼的是各种cell的高度计算了,虽然技术上并不难,但是对于自定义cell来说一旦控件比较多,计算起来就会很麻烦,会出现很多和height相关的代码,万一稍有偏差,就要小心老板和测试大虾们鄙视的小眼神了。 今晚呢,现在已经是凌晨了~ 下面就为大家介绍一种方法,让你的cell彻底丢弃HEIGHT这玩意儿~在正

2016-12-17 01:49:20 7031

原创 iOS 获取视频时长和大小

这里说的视频并不是相册中的视频,而是保存在你app沙盒中的视频文件//记得导入AVFoundation框架#import <AVFoundation/AVFoundation.h>xxfile.h/** * @method * * @brief 根据路径获取视频时长和大小 * @param path 视频路径 * @return 字典 @"size"--文件大小

2016-09-20 14:28:50 28175 1

原创 Mac中Xcode、文本编辑器逆天复制

可能你会遇到这种需求,我想复制每一行的某一部分内容,如下const NSTextAlignment TTTTextAlignmentLeft = NSTextAlignmentLeft;const NSTextAlignment TTTTextAlignmentCenter = NSTextAlignmentCenter;const NSTextAlignment TTTTextAlignmen

2016-08-28 23:02:21 1907

原创 iOS TTTAttributedLabel复制

对于试图类的第三方控件,一般情况下我是不喜欢使用cocoapods添加的,主要原因就是修改十分不便,稍一不慎就一朝回到解放前了。 TTTAttributedLabel是一个我特别喜欢的第三方label控件,可以替换UILabel使用,通过它可以很方便的计算高度,识别内容中的地址、链接、电话等内容,只要设置代理并实现相关delegate方法即可支持相关的单击、双击、长按操作。 这篇文章并不是主要介

2016-08-28 22:06:57 1653

原创 iOS 教你写通用的description方法

/** * @property (readonly, copy) NSString *description; * description是NSObject的一个只读属性,对于一般的属性都会有getter和setter方法,但是readonly的属性顾名思义就只有getter方法啦。 * 当你在XCode控制台使用po命令打印一个对象的时候,如果没有重写description方法,往往打印出的

2016-08-12 23:05:13 2851 2

原创 iOS控件禁用系统方法

- (BOOL)canPerformAction:(SEL)action withSender:(__unused id)sender{ //有很多系统方法,此处分别打印出来 NSLog(@"<< action: %@ >>",NSStringFromSelector(action)); //此处为了容易理解禁用了系统的copy:方法,看懂了之后

2016-08-07 17:34:08 767 3

空空如也

空空如也

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

TA关注的人

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