自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 问答 (1)
  • 收藏
  • 关注

原创 【Flutter】02:Dart基础语法

前言:前边配置好了环境,接下来学习flutter开发的语言,dart。一、查看Dart版本查看dart位置二、创建Dart工程先来创建个空的选择工程存放位置。设置好sdk的位置。设置Module名称。打开demo1.dart就可以看到类似OC工程里main文件的文件了。‘control + r ’ 即可运行代码,此时是跑在AS软件里的终端上的,未触发到模拟器上,因为属于一个空工程。三、创建flutter工程...

2021-10-22 02:06:37 1202

原创 【Flutter】01:Flutter开发环境配置

目录前言:什么是flutter?一、flutter SDK下载二、配置环境变量三、doctor检测处理1.更新cocoapods2.安装Android Studio3.下载SDK4.安装flutter插件5.license问题5.Java version问题。四、夜神模拟器下载安装五、gradle配置六、创建一个工程看看。七、Android Studio打开flutter八、总结前言:什么是flutter?Flutter是Googl...

2021-10-19 00:41:17 1537

原创 【iOS底层】19:KVC分析

前言:本文章开始分析KVC相关~一、Apple Developer Documentation地址:传送门这里就可以查找到kvc相关的苹果官方文档↓二、KVC的设置来结合代码理解一下kvc的setter1.看是否有set<Key> or _set<Key>- (void)viewDidLoad { [super viewDidLoad]; LGPerson *person = [[LGPerson alloc] i..

2021-07-26 17:58:38 210

原创 【iOS底层】14:类的加载原理(上)

前言:从这篇文章开始我们来探索一下类是如何加载到内存中的~一、_objc_init()分析environ_init():环境变量的初始化。点进去看看,方法内部最后有些打印环境变量的地方,我们将这段代码挪到前边还未打印数据之前,并将判断条件去除掉。就是↓这样的那么来打个断点打印一下看看objc[12906]: OBJC_PRINT_IMAGES: log image and library names as they are loadedobjc[12906]:...

2021-07-24 23:35:57 260 5

原创 【iOS底层】13:dyld补充及load、main函数调用探索

前言:上篇文章里探索了dyld的整体流程,还剩一些没有探索,这篇继续收个尾。一、_dyld_objc_notify_register函数参数调用时机上篇文章我们讲到objc源码中有个_objc_init()方法,其中的_dyld_objc_notify_register(&map_images, load_images, unmap_image);方法对镜像文件进行了加载。首个参数相当于下句柄(大概相当于个block),在dyld源码中mapped赋值给了sNotifyO.

2021-07-16 04:53:16 372 1

原创 【iOS底层】12:dyld应用程序加载

前言:从这篇起我们探索下应用程序的加载流程~一、库1.库:可执行的二进制文件,能够被系统加载到内存中。常规的就是静态库(.a),动态库(.dylib)。编译过程流程图:欠着静态链接:可能重复加载动态链接:对内存有优化2.可执行文件拖入终端可运行。二、库的加载dyld链接器!链接流程图:欠着Runtime_dyld_objc_notify_register()map_imagesLoad_imagesmain函数三、dyld探

2021-07-15 23:09:50 250

原创 【iOS底层】11:消息转发

一、msgSend消息发送监听在探索了很多次了lookUpImpOrForward方法中,查找完成后会写入cache在写入cache中发现有个打印log的操作我们来看下是否可以通过这个输出到本地的日志,是否可以查看到一些不一样的流程和我们还没探索过的方法。上图中看到如果想要调用logMessageSend方法,需要满足判断条件:objcMsgLogEnabled && implementer,implementer是我们传入的class,那么影响判断的就只有o..

2021-07-09 16:43:39 252

原创 【iOS底层】10:消息动态决议

一、方法实现缺失报错@interface LGPerson : NSObject- (void)sayHello;+ (void)sayHelloPlus;- (void)sayPerson;+ (void)sayPersonPlus;@end@implementation LGPerson- (void)sayPerson{ NSLog(@"%s",__func__);}+ (void)sayPersonPlus{ NSLog(@"%s",__func__);

2021-07-06 00:21:16 111

原创 【iOS底层】09:objc_msgSend慢速查找

回顾:上边博客分析了objc_msgSend通过receiver和SEL查找到对应imp的过程,这篇我们探索下如果最终未找到imp,执行的__objc_msgSend_uncached这个方法。一、真机跟汇编流程(可以真机调试的小伙伴自行探索)register read x1读各种内存比对,然后验证回顾并加深objc_msgSend流程。二、__objc_msgSend_uncachedSTATIC_ENTRY __objc_msgSend_uncached UNWIND __.

2021-06-30 20:08:34 227

原创 【iOS底层】08:objc_msgSend(下)

回顾:上篇文章我们讲了objc_msgSend(recevier, SEL),以及汇编查看流程objc_msgSend,判断receiver是否存在,存在的话通过receiver获取到isa,继而获取到class。那么这篇文章继续跟汇编流程往下走。一、objc_msgSend汇编查找//上次我们看到这里LGetIsaDone: //获取玩isa以后 调用imp或者objc_msgSend_uncached // calls imp or objc_msgSend_uncached .

2021-06-30 18:43:31 91

原创 【iOS底层】07:objc_msgSend(上)

回顾:上一篇我们分析了cache_t的结构。接下来我们分析下cache之前是谁调用了cache,我们来看下objc_msgSend!一、Runtime了解ojbc_msgSend之前我们先补充下关于Runtime方面的知识。什么是Runtime:编译运行时Runtime是一套底层纯C语言API,OC代码最终都会被编译器转化为运行时代码,通过消息机制决定函数调用方式,这也是OC作为动态语言使用的基础。Runtime有2个版本Legacy(早期版本):用于Objctive-C 1

2021-06-29 23:52:55 244 2

原创 【iOS底层】06:cache_t分析

struct objc_class : objc_object {// Class ISA; Class superclass; cache_t cache; // formerly cache pointer and vtable class_data_bits_t bits; }在分析完了类里的ISA,bits以后,我们来看下另一块比较重要的--cache。一、cache_t数据结构分析我们先从源码来看下cache_t的数据结构:s..

2021-06-28 17:50:56 175

原创 【iOS底层】05:类原理分析(下)

目录回顾:一、属性、成员变量、实例变量的区别二、sel&imp 编码表补充三、setter方法底层原理四、类方法存储API方式解析五、isKindOfClass面试题分析六、总结回顾:.objc_object 和 objc_class是继承关系,class继承自object。.像person和NSObject,person和objc_object没有继承等关系,只是一个上层,一个底层,然后NSObject是按照objc_class的模板创建的。.id 是

2021-06-25 02:54:26 418 1

原创 【iOS底层】04:类原理分析(上)

目录一、元类二、lldb调试分析isa走向三、指针平移四、类结构分析需要注意的是objc_class有三处创建:我们着重看看cache_t这个结构体的大小:五、bits数据查看lldb探究bits数据如下过程:*类的方法获取:六、成员变量和类方法的查找*查找类方法+ (void)sayGoodbye;我们终于找到类方法+ (void)sayGoodbye;了七、总结一、元类经典原理图:二、lldb调试分析isa走向从上篇博...

2021-06-23 01:43:53 696 2

原创 【iOS底层】03:对象的本质及isa结构

一、对象的本质Clang:Clang是一个有Apple主导编写的,基于LLVM的C/C++/Objective-C编译器。功能比gcc更强。对象在底层被编译成一个结构体。二、联合体(union) 位域参考文章:https://blog.csdn.net/whahu1989/article/details/84575558?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMa...

2021-06-16 12:04:29 144

原创 【iOS底层】01:alloc探索及流程分析

一、底层探索分析的三种方法方法一:直接添加符号断点。方法二:打了普通断点以后,跑到断点处,按住control,step into,进去后查看到调用方法名,将方法名添加一个符号断点,再执行即可查找到底层库。方法三:打了普通断点以后,跑到断点处,点击顶部Debug—Debug Workflow — Always Show Dissassembly(汇编);再下一行找到方法名打断点,然后再step into。二、编译器优化Project中 Build Setting,搜索op...

2021-06-15 23:01:28 131 1

原创 联合体、位域

本文参考自:https://blog.csdn.net/whahu1989/article/details/84575558?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.vipsorttest&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7

2021-05-10 16:50:27 1194

原创 Xcode如何自定义代码块

前言:在项目开发中我们常常会需要编写重复性的代码,比如创建各种属性、tableView的各种代理方法、初始化方法,如果每个属性每个方法都手打一遍的话,无疑会浪费我们很多宝贵时间,那么Xcode提供的自定义代码块功能就能完美解决了这一困扰,那么该如何自定义代码块呢?废话不多说,直接开整!正文:1.我们以Xcode12.4为例,代码块由早期的右侧展示区的底部,移到了顶部的右上角,显示一个➕点击以后会弹出一个窗口如下图*User列表里代表的就是用户自定义的代码块儿,剩下的都是系统自带的代码

2021-05-08 21:55:13 648

原创 Go2Shell的安装与配置

前言:在了解并安装了iTerm2以后,又发现了一个好用的小工具,Go2Shell,那么它有什么用呢?它可以实现在你打开的文件夹下直接跳转到终端的当前目录下,更方面的让我们对当前文件夹下的文件进行终端下的操作。这个配置相对比较简单,我们来操作一下~一、下载地址:https://zipzapmac.com/Go2Shell因为APP Store版本的Go2Shell已经不维护了,我们直接去官网下载。点击FREE DOWNLOAD下载并安装到Application里即可。二、配置安

2021-04-25 15:10:24 809 4

原创 mac下iTerm2和oh-my-zsh安装教程

前言:最近接触到了一个终端软件iTerm2,据说功能很强大,比原生的终端要好用,所以打算搞一下用用看,结果按照网上的教程安装,困难重重啊,各种报错,于是记录下来我的安装过程及错误解决方法,希望能帮助到其它小伙伴更顺利的安装上该软件。废话少说,下面开始~先来看看效果图:一、安装iTerm2下载地址:https://iterm2.com/downloads.html前往官网下载并安装即可,安装完成后会提示是否移到Application里,点确定就行。二、安装oh-my-zsh.

2021-04-22 19:55:14 1134

原创 【iOS底层】02:内存对齐

先来几个例子struct LGStruct1 { double a; //8 (0-7) char b; //1 (8) int c; //4 (12 13 14 15) 9 10 11都不是4的倍数,弃用,内存对齐,优化读写 short d; //2 (16 17)}struct1;//最终需要16+8?该结构体中成员变量最大的是8,所以+8。struct LGStruct2 { double a; //8 (0-7) ...

2021-04-20 18:46:17 70

原创 objc4-787.1源码编译调试避坑

由于最近在看iOS底层原理的东西,于是想把objc的源码下载下来编译调试,但是过程是曲折的,下载下来以后遇到了各种问题,现贴出来解决过程,也帮助各位同样想编译调试objc源码的小伙伴更快的运行起来,话不多说,开始吧~■首先,要先把objc4的源码下载下来,这里贴个网址:https://opensource.apple.com根据自己的mac电脑系统版本选择对应的链接点进去,我的是10.15.7,就选择10.15.6就好了~进入后command+f 搜索 “objc4”点击右侧下载即可。

2021-04-13 12:05:14 357 2

原创 iOS UISwitch缩放及布局的坑

如题,应设计要求,默认的switch大小不符合设计要求,所以对switch进行了缩放,方法如下:switch.transfrom =CGAffineTransformMakeScale(0.863, 0.863);如上代码,大小缩放为了原来尺寸的0.863倍。but..... 坑来了switch是放在cell中右侧,在进行布局的时候,layoutSubviews里设置了switc...

2019-09-23 14:58:47 1740

原创 初识Masonry,总结简单使用方法

前情:因项目多人开发,决定弃用xib了,所以改用Masonry来进行AutoLayout布局,这里简单总结下使用方法。*常用方法:label为例:[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.mas_equalTo(20); make....

2019-04-26 15:51:03 1311

原创 git管理工具sourceTree使用问题总结

一、其他同事更改了其分支名称名同步到了远端,导致自己这边pull的时候报错error:cannot lock ref 'xx/xxx/xxx' : ref xxx/xxx/xxx is at <hash code1> but except <hash code2>(unable to update local ref)这时候可以选择更新下远端的分支结构,有一些...

2019-04-23 16:24:14 565

原创 UIView与自建Xib关联

因为UIView创建的时候默认是不能同时创建xib的,但是想用xib搭建界面更方便。关联步骤:1.在xcode想创建xib的地方command+n,选择View名字尽量和想要关联的UIView名称保持一致。2.在File's Owner中的第三项Class中输入UIView的名称3.选中xib中自动创建的view,执行与第二步相同的操作,Class中填入UIView...

2019-04-23 16:15:44 667

原创 Xcode10运行旧工程报错multiple commands produce info.plist

如题,Xcode10运行旧工程报错multiple commands produce info.plist,截图如下解决方案:Xcode--File--Workspace Settings  ,如下图。打开后将Build System:改为Legacy Build System。保存即可。如下图:...

2019-02-18 16:56:10 186

原创 iOS获取系统文字字号

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; UIFontDescriptor *ctFont = font.fontDescriptor; NSNumber *fontString = [ctFont objectForKey:@"NSFontSizeAttribute"]...

2018-11-14 17:40:55 1908

转载 UIButton放在屏幕底部响应按下延迟

转自:https://blog.csdn.net/haha223545/article/details/80259217第1部分:说明最近在做一个类似微信语音聊天的功能,在屏幕的底部放一个Button,按下时可以语音说话,松开时将语音发出去。但是做的过程中遇到一个坑:按钮放到页面最底部的时候会延迟touchDown事件。第2部分:解决步骤在网上找了一些回答,好多都是说受到Tab...

2018-08-28 15:28:53 469

原创 激活textField后直接选中所有文字

今天遇到个小需求:如果输入框有文字在未激活状态,点击后激活,默认选中所有文字。解决方案:开始尝试了设置textField.selectedTextRange,其start和end值可采用textField.beginningOfDocument和.endOfDocument.但是这两个值是只读的,查询未果后发现另外一个方法,只需一行代码,尝试后可行,现分享给大家:[self.textField p...

2018-06-12 16:02:12 2215

原创 关于textField输入光标颜色及cleanButton大小和颜色的设置

光标颜色设置:self.textField.tintColor = [UIColorwhiteColor];右侧的clean按钮:UIButton *clean = [self.textFieldvalueForKey:@"_clearButton"]; //key是固定的[clean setImage:[UIImageimageName

2017-07-28 14:18:24 5103

原创 导航栏背景色、标题颜色以及返回键自定义

1.导航栏背景色设置://设置为半透明self.navigationController.navigationBar.translucent = YES;//设置背景色及透明度[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageWithColor:[UICol

2017-07-25 18:29:45 2039

原创 textField.placeholder的文字颜色修改

//"通过KVC修改占位文字的颜色"  [self.textField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];亲测有效~

2017-07-21 11:22:59 287

原创 iOS view无限360度旋转和停止

- (void)rotateView:(UIImageView *)view{    CABasicAnimation *rotationAnimation;    rotationAnimation = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];    rotationAnim

2017-04-13 19:52:00 6174

原创 版本号比较方法

在开发中大家应该会遇到版本升级的问题,那么怎么对比版本号呢?特别是有的时候版本号长度还不等如:高版本号为6.8.0  而本地版本号为6.7.0.1如果是一般的位数相等的版本号解决方法可以是:1.去掉版本号中的“.“,然后转成float等数字进行对比即可。2.循环挨个字符对比,遇到不等的即可break;如果是版本号位数不等的情况,上边第二种方法也可以适用,但是稍显繁琐。

2017-03-08 16:28:53 2259

原创 CGRectGet方法解释

CGRectGetHeight返回label本身的高度CGRectGetMinY返回label顶部的坐标CGRectGetMaxY 返回label底部的坐标CGRectGetMinX 返回label左边缘的坐标CGRectGetMaxX 返回label右边缘的坐标CGRectGetMidX表示得到一个frame中心点的X坐标CGRectGetMidY

2017-02-24 10:10:19 605

原创 Xcode8快捷键注释问题

Xcode8注释

2017-01-17 11:56:37 4367

原创 iOS开发证书及推送证书的生成教程

以下是我自己摸索出来的证书生成过程,如有错误欢迎指正~一、生成开发证书这里的证书包括开发(development)证书和生产(production)证书。1.打开钥匙串访问--》证书助理--》从证书颁发机构请求证书,输入邮箱和常用名,常用名将作为你的密钥名,选择保存到磁盘,名字默认就可以,存到桌面。2.登录苹果的开发者中心,登录自己的开发者账号进入,选择证书。单击这里的

2015-04-21 19:20:51 1017 1

原创 关于VM:CG raster data的释放

项目中用Instrument检测内存的时候发现打开某个页面的时候发现VM:CG raster data这个字段一下涨好几M。找了好久发现和毛玻璃有关,只要在界面关闭时将承载毛玻璃的image = nil即可,小伙伴们试试吧,深层次的原因欢迎大家分享给我~

2015-02-02 17:43:39 3136

原创 如何通过友盟的错误信息分析项目中问题的具体位置

一、你需要找到和友盟上相同版本的Archive文件,位置是xcode-》Windows-》Organizer,找到打包的那一条目,右键Show in Finder-》右键显示包内容-》dSYMs下找到 项目名.app.dSYM,将其拷贝到文件夹A。二、打开友盟,找到错误信息中青色带下划线的内存地址,有时候会有2个,用上边的那一个,如下图的0xb1d51。三、打开终端

2015-01-26 10:11:23 654

空空如也

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

TA关注的人

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