自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小菜媛的博客

千里之行,始于足下。

  • 博客(36)
  • 收藏
  • 关注

原创 Flutter报错 - command not found: flutter

1 、执行:【open ~/.zshrc 】open ~/.zshrc2 、如果 提示文件不存在,则执行:【vim ~/.zshrc 】新建一个新文件。vim ~/.zshrc3 、再执行【open ~/.bash_profile 】open ~/.bash_profile4 、把 bash_profile 中的内容copy到 zshrc 文件中,保存:【:wq回车】。export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_

2022-03-03 10:05:50 5584 1

原创 Flutter 三角旋转动画

///三角旋转动画、默认三角形,可传其他iconclass AnimationArrow extends StatefulWidget { bool isSelected; String imageName; AnimationArrow( {this.isSelected = false, this.imageName = 'assets/images/arrow_down.png'}); @override _AnimationArrowState crea

2020-12-18 15:44:15 726 1

原创 iOS自定义导航条实现侧滑功能(含Native和Flutter)

1、基本页面iOS7之后是有侧滑返回手势功能的,因此直接触发系统的处理方法就行。当前控制器是根控制器时,不可以侧滑返回,所以不能使其触发手势。在项目的baseVC中,添加以下代码:@interface BaseViewController ()<UIGestureRecognizerDelegate>@end- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (s

2020-07-07 22:50:12 734

原创 Flutter和iOS原生通信

1、iOS给Flutter传值iOS代码:添加FlutterEventChannel和eventChannel的属性,实列化FlutterEventChannel,设置binaryMessenger为当前flutterVC;@property (nonatomic, strong) FlutterEventChannel *eventChannel;@property (nonatomic, strong) FlutterEventSink eventSink; self.eventCh

2020-06-07 18:40:40 2174 1

原创 warning - Launch image are deprecated in iOS13.0. Use a launch storyboard or XIB instead

1、刪除Images.xcassets中的LaunchImage文件夹2、在Build Settings中,Asset Catalog Launch Image Set Name中刪除LaunchImage(包含Debug和Release中)3、在项目中添加Launch Screen.storyboard添加imageView,设置image为scaleAspectFill,添加mage,四周间距为0,去掉use Full Screen的勾选4、TARGETS->Gene...

2020-05-25 14:04:58 1759

原创 Flutter开发问题记录-持续更新中

1、flutter的GestureDetector 点击没反应GestureDetector需要添加behavior: HitTestBehavior.opaqueGestureDetector( behavior: HitTestBehavior.opaque, child: GestureDetector( behavior: HitTestBehavior.opaque, onTap: (){ print("

2020-05-23 12:32:44 462 1

原创 iOS多语言国际化(二)-python脚本自动翻译

基于百度翻译API实现国际化自动翻译脚本(背景:手写多语言的KEY,替换文件中的中文繁琐、耗时)1、通过接入百度翻译API生成xx.strings所需要的KEY2、通过分析项目中的.m文件找到所需的翻译的中文,生成KEY、VALUE的对应关系,并替换.m文件中的中文3、将翻译生成的对应关系的词条写入xx.strings文件操作方式:进入项目autoTranslation.py所在的目录...

2020-04-28 10:34:47 1043

原创 iOS多语言国际化(一)-python脚本自动翻译

百度翻译开发者平台申请开发者信息通用翻译API接入文档https://api.fanyi.baidu.com/doc/21请求参数:q=applefrom=ento=zhappid=2015063000000001(请替换为您的appid)salt=1435660288(随机码)平台分配的密钥: 12345678生成签名sign:Step1. 拼接字符串1:拼接ap...

2020-04-16 16:27:42 907

原创 Airtest自动化测试流程

AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和APP。1.安装AirTest IDE 官网下载:http://airtest.netease.com/解压即用。2、连接设备2.1 部署iOS-TagentiOS-Tagent下载地址2.1.1 git clone https://github.com/AirtestProject/iOS-Tage...

2020-04-05 23:40:32 1029

转载 NSDictionary和NSMutableArray底层原理(哈希表和环形缓冲区)

https://blog.csdn.net/Deft_MKJing/article/details/82732833前言1.NSDictionary底层是哈希表,下面会介绍具体是用拉链法还是开放定址法线性探测来解决冲突?由于Apple给的查询复杂度可以快至O(1),那么为什么是O(1),底层是如何通过空间换取时间的?2.NSArray是线性连续内存,这个很好理解。但是NSMutable...

2020-04-02 17:06:55 548

原创 Cocoapods- ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.

升级cocoapods 出现如下错误信息ERROR: Error installing cocoapods:ERROR: Failed to build gem native extension. current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.12.2/ext/ffi_c/System/Library/Fram...

2020-03-22 20:10:21 16758 1

原创 WKWebView的POST请求,以form表单形式提交

由于项目对接国外k-plus支付,第三方在接口请求链接需要post发送参数,记忆中用以下方式即可,后面发现此方法在WKWebView并不可行~~ NSString *strUrl = @"请求的url"; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL U...

2020-03-22 20:09:20 3867

原创 MAC安装Flutter

系统环境要求操作系统: macOS (64-bit)磁盘空间: 至少3个G1、首先下载Flutter SDKhttps://flutter.dev/docs/get-started/install/macos#get-sdk将文件提取到所需位置cd ~/development$ unzip ~/Downloads/flutter_macos_v1.12.13+hotfi...

2020-02-03 21:11:33 1912

原创 58同城iOS面试题

58金融一面1、KVO的具体实现?比如A要知道B的属性的变化?2、单列怎么释放?3、GCD里面放NSTimer,可以正常定时吗?4、算法:无序数组找最大和最小值?最优方案5、设计题:接口数据返回list里面只有type字段,怎么做到cell里面没有if else或者switch语句6、NSUserDefaults的使用7、cocoaPods里面pod i...

2020-01-07 21:28:33 2760

原创 MAC安装vue.js

一、首先需要安装必要的软件Homebrew:Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件Node.js:JavaScript运行环境(runtime)npm:node.js下的包管理器,npm能很好地和诸如webpack或Browserify模块打包器配合使用webpack:vue的组件都是.vue无法被用户端的浏览器解析,需要编译和打包成js文件 ...

2019-11-07 10:52:25 620

原创 iOS13部分适配

1、UIApplication的keyWindow被标记为API_DEPRECATED,获取的为nil修改为[[[UIApplication sharedApplication] windows] objectAtIndex:0]2、OS13中通过KVC方式来获取私有属性,有Carsh风险,访问私有变量崩溃,比如 UITextField * searchField =[_searchBar...

2019-10-17 18:23:37 1851

原创 iOS多语言-Crowdin集成

Homebrew for macOS安装 Crowdin CLI 使用homebrew命令行$ brew install crowdin需要安装JDKjava --version查看java版本javase下载配置$ crowdin generate 生成配置文件crowdin.yml"project_identifier" : "应用名字""api_key"...

2019-09-29 16:57:56 2165

原创 Mac使用Sourcetree跳过注册

打开Sourcetree 关闭Sourcetree 命令终端输入defaults write com.torusknot.SourceTreeNotMAS completedWelcomeWizardVersion 3 打开Sourcetree即可跳过登录

2019-09-15 16:21:14 1852

原创 不同锁的性能比较

1、OSSpinLock(自旋锁) High-level lockOSSpinLock叫做”自旋锁”,等待锁的线程会处于忙等(busy-wait)状态,一直占用着CPU资源目前已经不再安全,可能会出现优先级反转问题如果等待锁的线程优先级较高,它会一直占用着CPU资源,优先级低的线程就无法释放锁需要导入头文件#import <libkern/OSAtomic.h>#...

2019-08-21 21:09:38 2222

原创 响应链及其事件传递

触摸事件处理的详细过程:当用户点击屏幕后产生一个触摸事件,经过经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件,找到最合适的视图之后,就会调用空间的touches那三个方法,这些方法的默认做法是把事件顺着响应者链条向上传递,将事件传递给上一个响应者进行处理。传递过程UIApplication接收到事件,将事件传递给Window。 Window遍历subViews的hi...

2019-08-19 23:18:57 1802

原创 iOS的几种定时器

在开发中我们经常用到定时器,iOS为我们提供了多种定时器,包括NSTimer、CADisplayLink、GCD。NSTimeriOS中最基本的定时器,其通过RunLoop来实现,一般情况下较为准确,但当前循环耗时操作较多时,会出现延迟问题。同时,也受所加入的RunLoop的RunLoopMode影响,如果因为创建的NSTimer默认是被加入到了defaultMode,比如在一个视图里...

2019-08-13 22:05:10 3229

原创 iOS启动优化方案

APP的启动可以分为2种冷启动(Cold Launch):从零开始启动APP 热启动(Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APPAPP启动时间的优化,主要是针对冷启动进行优化通过添加环境变量可以打印出APP的启动时间分析(Edit scheme -> Run -> Arguments)DYLD_PRINT_STATISTICS设置为...

2019-08-12 22:02:10 1949

原创 iOS性能优化-列表卡顿

会造成卡顿的原因大致有哪些?CPU和GPU在屏幕成像的过程中,CPU和GPU起着至关重要的作用CPU(Central Processing Unit,中央处理器)对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)GPU(Graphics Processing Unit,图形处理器)纹理的渲染视图的...

2019-08-05 23:06:22 3001

原创 iOS项目优化-APP瘦身

前言由于在上家创业公司被现在的公司收购,最终把两个APP融合成一个APP,当时只是把代码进行复制黏贴,后面一直在做开发,急着上线功能,所以我也没有对APP进行优化。项目打包之后ipa包的大小是一百多兆,下载时间太长,年初比较闲,决定来优化安装包,结合其他开发者的优化方法进行瘦身,最终变成80兆。1、配置编译选项(Levels选项内)Generate Debug Symbols 设置...

2019-07-30 18:45:33 461

原创 TCP和UDP的区别

TCP和UDP的思维导图:TCP:面向连接,传送可靠,数据量少,速度相对较慢;UDP:面向非连接,传送不可靠,传输大量数据 ,速度快。TCP的优点: 可靠,稳定TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP...

2019-07-30 10:47:32 106

转载 HTTPS理论基础

我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。密码学基础在正式讲解HTTPS协议之前,我们首先要知道一些密...

2019-07-09 13:59:05 270

原创 property中的属性关键字

ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?atomic、readwrite、strong(对象)、assgin(基本数据类型)。具体比较分析:1、atomic与nonatomicatomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些加锁代码,避免该变量的读写不同步的问题,提供多线程安全。nonatomic:如果该对象无需考虑...

2019-06-27 17:23:12 412

原创 说说那些年不懂的atomic和nonatomic的区别

首先,明确几个概念,原子性是什么?线程安全是什么?原子性是指一个事物的操作是不可分割的,要么都发生,要么都不发生。线程安全是指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程,使程序功能正确完成。其实意思就是多线程情况下程序的执行顺序要有单一性和正确性。atomic原子属性是默认的 只能说是set/get是安全的,但当进行其他操作的时候,线程并不是完全安全的 会保证 C...

2019-06-27 15:34:23 550

原创 常见排序和二分查找(OC版本)

//选择排序O(n²)- (void)selectSort{ NSMutableArray *arr =[ [NSMutableArray alloc] initWithObjects:@"2",@"9",@"19",@"1",@"80",nil]; NSInteger length = arr.count; for (NSInteger i = 0; i < length ...

2019-06-14 11:08:19 228

转载 AutoreleasePool底层实现原理

AutoreleasePool(自动释放池)是OC中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。AutoreleasePool创建和释放App启动后,苹果在主线程 RunLoop 里注册了两个...

2019-06-13 14:58:39 321

原创 iOS中内存管理方案

系统提供的有不同的内存管理方案,大致有如下三种:TaggedPointer(对于一些小对象,比如说NSNumber,NSString等采用此种方案) NONPOINTER_ISA(64位架构下iOS应用程序) 散列表(散列表为复杂的数据结构,包含了引用计数表和弱引用表)TaggedPointer以下2段代码能发生什么事?有什么区别?- (void)setName:...

2019-06-13 11:57:59 2577

原创 如何通过RunTime实现KVO?

首先我们需要思考什么是KVO?当你观察一个对象时,调用对象的addobserver:forkeypath :options:content时,一个新的NSKVOObservering类会被动态创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。重写的 setter 方法会负责在调用原 setter 方法之前willchangevalueforkey和之后didchan...

2019-05-28 16:41:57 162

原创 Block理解

什么是block?block是将函数及其执行上下文封装起来的对象。截获变量截获变量不同类型不同结果基本数据类型的局部变量截获其值对象类型的局部变量连同所有权修饰符一起截获 截获即赋值(被截获的局部变量就会在block结构里面形式一个一样的变量)指针形式 截获局部静态变量不截获 全局变量 静态全局变量(获取的是变量的最新的值)__block 修饰符对...

2019-05-13 22:11:52 663

原创 如何修改类的私有属性,设置属性值?

有两种方法可以访问私有属性,一种是通过KVC,一种是通过runtime访问并修改私有属性。方法一:// Model.m#import "Model.h"@interface Model ()// 私有属性@property (nonatomic, strong) NSString *name;@endViewController.m- (void)viewDidL...

2018-10-11 15:33:41 2917

原创 RunTime常用场景小结

RunTime简称运行时,基本用C和汇编写的。1.消息转发机制;2.通过分类扩展属性;3.拦截系统方法调用(高大上的Swizzle 黑魔法),其实也是对系统的方法进行交换方法;4.序列化和反序列;5.实现字典和模型的自动转换;下面我们具体来分析一下RunTime的使用场景;1.消息转发机制:当调用某对象上某个方法(sendMessage),而该方法没有实现时,系统会报u...

2018-09-05 17:41:44 1834

原创 多个category实现同一个方法调用的顺序

一​​​​​​准备工作:搭建环境,新建category项目,添加A,B,C三个分类。二 测试​​​​与结论:1.主类和三个分类分别添加+ (void)load方法;运行项目后,输出结果:初步可以有以下结论:+load方法的优先级: 父类> 分类,那么分类的优先级是怎么样的呢?我们调整分类的编译顺序:结果发现:分类优先级为编译的顺序,从上到下...

2018-08-29 15:04:52 4798 1

空空如也

空空如也

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

TA关注的人

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