- 博客(429)
- 资源 (17)
- 收藏
- 关注
原创 鸿蒙开发之页面与组件生命周期
创建文件的时候记得选择创建page文件,这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。当我们在点击跳转的时候,会先调用第一个页面的onPageHide,然后调用第二个页面的onPageShow。当通过路由返回的时候先调用第二个页面的onPageHide,然后第一个页面的onPageShow。所以,当我们开启预览的时候,第一个页面加载会先调用第一个页面的onPageShow。我们在Page222页面想要回到第一个页面,可以执行。
2023-12-12 17:26:52
1178
原创 鸿蒙开发之状态管理@Watch装饰器
再次调用关注变量的更改。因为函数内部的更改导致change函数的调用,函数的调用又导致变量的更改,不断循环调用导致死循环。@Watch应用于对状态变量的监听。如果需要关注某个状态变量的值是否改变,可以使用@Watch为状态变量设置回调函数。建议@Watch('change')写在@State后边,并且注意@Watch后边传递的参数是字符串。当我们在程序中count的值发生改变的时候就会回调change函数。需要注意的是,在函数内部一定。
2023-12-12 16:28:01
1095
原创 鸿蒙开发之状态管理@Observed和@ObjectLink
当对象内引用对象,改变内部对象属性的时候其他状态管理如@State、@Provide、@Consume等是无法触发更新的。同样,在数组内如果有对象,改变对象的属性也是无法更新的。这个基础上,我们需要在点击任务完成的时候,修改任务列表卡片的文字颜色,并中划线。在我们需要监控的对象组件使用@Observed装饰,将需要变更的地方抽取出来作为一个新的组件,新组件内部引用对象使用@ObjectLink装饰。其中,需要注意的第一点,传递父组件的方法时,传递的是this.handleTaskNumber没有()。
2023-12-12 11:03:06
1657
原创 鸿蒙开发之状态管理@Prop和@Link
如果想要父组件与孙子组件中的数据达到双向同步,那么就需要先父组件与子组件绑定,然后子组件与孙子组件绑定,需要绑定多次。StaticList组件因为可以对数据进行完成、删除等操作,也会对父组件的数据改变,所以采用双向同步的@Link装饰。在父组件中用@Provide装饰,在孙子组件中采用@Consume装饰,就可以实现双向数据同步。@Prop的数据是单向传递的,父组件改变能通知子组件,但是子组件改变不能通知父组件。@Link的数据是双向传递的,父组件改变能通知子组件,子组件的改变也可以通知父组件。
2023-12-12 10:05:41
3127
原创 鸿蒙开发之状态管理@State
定义一个Person类,我们用@State装饰器监听成员变量p,那么在点击方法中设置p的年龄为21,那么相应的Text内容也发生了改变。当然,数组也是同样的,如果是对单层的数组进行增删是可以监听到的。如果是嵌套数组,对内部数组进行操作,也是无法监听到的。之所以成为双向绑定可以这样理解,在视图上的点击事件中去更改状态数据,反过来监听状态的视图也发生相应的数据改变。但是,监听的嵌套对象的属性或者嵌套的数组内属性的改变不能引起视图的改变。状态:指的是被装饰器装饰的驱动视图更新的数据。
2023-12-11 15:53:35
1741
原创 鸿蒙开发之封装优化
在之前的List中,我们的也可以抽离出来使用@Builder function作为一个全局的函数Column() {我们在使用的地方直接调用即可ForEach(//直接使用封装的全局函数如果,我们想讲方法定义到组件内,那么需要去掉function关键字,在使用的时候通过this访问。
2023-12-10 13:32:42
1256
原创 鸿蒙开发组件之list
如果页面的List上边有其他视图,那么滑动的时候会有部分不能滑动出来。可以利用layoutWeight属性。这个属性是用来设置比例的默认为0。如果其他的视图不设置,然后设置了List为1,那么就表示List是占用其他视图剩下的所有区域。List中是一个ForEach,需要注意的是item要返回的是ListItem组件。List支持竖直方向与水平方向滚动,利用属性listDirection。其中,List中的space可以设置两个ListItem组件的间距。
2023-12-10 12:14:28
1525
原创 鸿蒙开发组件之ForEach列表
例如图中没有折扣的可以看成一个Row,然后图片在左边,然后右边是一个Column,然后右侧Column中两个Text组件竖向排列。ForEach函数是一个迭代函数,需要传递两个必须参数和一个可选参数。主要通过迭代来获取参数arr中的数据不断的生成单个Item来生成鸿蒙中的列表样式。想要实现Text的中划线,可以使用属性decoration装饰器,这个属性可以设置上划线、中划线、下划线等等。ForEach函数需要传递一个数组,数组中是多个Item,可以定义一个Item类来加载数据。
2023-12-09 16:17:45
2824
原创 鸿蒙开发组件之Row、Column
其中,Row是横向排列,可以理解为1行,然后,Column是作为竖向排列,可以理解为1列。开发的过程中主要是对主轴的控制比较多,所以一般设置的属性是justifyContent。Row与Column布局时有两个重要的概念,主轴与交叉轴,可以通过设置主轴与交叉轴的排列方式来改变子控件的排列方向以及间隔等。通过设置Row与Column的justifyContent属性,控制子控件的排列方式。内边距可以理解一个Row中控件距离该Row的上下左右的距离。外边距可以理解一个Row距离其他Row的上下左右的距离。
2023-12-09 14:23:51
1710
原创 鸿蒙开发组件之Slider
小tips:如果不知道需要设置什么,可以通过看官方文档,而且是中文版,真的是遥遥领先,👍。设置滑动条的高度不能用height,要用trackThickness属性。也可以通过showTips值来设置是否有上方的value小提示。Slider滑动条值改变是通过onChange方法监听的。其中如果滑块style属性对应的值是inset,那么是。相关初始化属性对应样式如下。
2023-12-09 13:26:40
1107
原创 鸿蒙开发组件之Button
Button() {其中,文本类型Button组件可以通过设置type属性来改变按钮的 形态,例如:圆形,圆角,直角(Normal)按钮最重要的功能就是点击事件,可以通过onclick来添加点击事件Button('点我')console.log('点击了按钮')})
2023-12-09 12:50:16
1232
原创 鸿蒙开发组件之TextInput
需要注意的是如果我们在删除输入框的内容为null时,输入框内容会变成NAN,之后就不可以再输入了。所以,我们可以在处理value的时候可以加上判断。我们在拿到value的时候通过if判断来给imageWidth属性赋值。并把字符串类型的value通过parseInt函数转成了Int类型。在Text中,通过读取string文件中文本来完成国际化,同理,placeholder也可以这样处理。TextInput可以通过style属性来设置是否是密码输入框,以及文本的是数字、email等内容。
2023-12-09 12:49:05
1902
原创 鸿蒙开发组件之Text
其中,文本设置可以支持国际化。可以通过对本地文本读取支持国际化。在需要设置国际化的文本分别在Resource->en-US/zh-CN->element->string中填写,填写上名字和对应的值即可。需要注意的是,想要支持国际化,上述string文件中的文本需要在Resource->base>element->string中也定义一份,否则会报错base中未定义。系统在运行时会根据系统的语言选择读取,然后读取不到就会从base中读取。
2023-12-09 12:42:44
845
原创 鸿蒙开发组件之Image
另外,Image还有一个独特的属性interpolation图片插值,可以设置图片在放大后的图片的质量,可以通过设置这个参数来改变图片加载后的质量。直接Image('xxxx'),添加上图片的网络地址就可以了。注意:真机、模拟题调试需要申请"ohos.permission.INTERNET"权限。那么使用$r('app/media/xxx')加载,不需要添加图片格式的后缀。那么使用$rawfile('xxx.png')加载,需要有图片的后缀。Image(PixelMapObject)加载。
2023-12-09 12:40:21
1393
原创 鸿蒙问题(解决)之:hvigor ERROR: Schema validate failed. Detail: Please check the following fields.
报错,感觉是说reason要用指定的字符,但是修改后还是报错,先不管了。之后再查找问题,待修复。记录问题,在鸿蒙开发中申请网络权限,设置了代码如下。
2023-12-09 12:36:44
3907
3
原创 pytest
python成熟的单元测试框架,更灵活。可以和selenlum,request,applum结合实现web、接口、app自动化。可以实现测试用例的跳过和失败用例重试。pytest可以和allure生成美观的测试报告。pytest可以和jenkins持续集成。pytest有很多强大的插件:pytest-html(生成html格式的自动化测试报告)pytest-xdlst(测试用例分布式执行,多CPU分发)pytest-ordering(改变测试用例的执行顺序)
2023-06-06 16:54:02
627
原创 Jmter自动化
提取token,那么就是"access_token":"(.*?)" 将要提取的值替换成(.*?//进入到脚本目录中,执行test.jmx脚本,并生成html报告到result文件夹内。将接口1的token添加到请求头中。如果两个接口有依赖关系:接口2需要接口1的token来进行请求。access_token表示在第一步中获取的token的变量名。反例:鉴权异常情况、参数异常、兼容性、黑名单、调用次数异常。1、拿到api接口文档,熟悉接口业务。1、先提取接口1的token。2、在接口2添加信息头管理器。
2023-06-06 16:52:54
404
原创 Jmter压测试
表示在多长时间内开启多少个线程,如果设置为10,表示10s内开启对应的线程数。模拟用户数,线程数1表示1个用户,如果模拟10个用户就设置线程数为10。将登陆的接口放到这个仅一次的控制器里,实现登陆一次来压测其他接口。表示如果不惦记停止,就会一直压测,不会自动停止。原理是会等全部的线程都准备完毕再去进行压测。添加逻辑控制器的仅一次控制器。用来查看并发请求的结果。监听器结果,单位是毫秒。设置HTTP请求内容。
2023-06-06 16:51:24
723
原创 测试概念相关
事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作。事务是一组不可分割的操作集合。1、原子性:事务中全部操作在数据库不可分割,要么全部执行,要么全不执行。2、一致性:几个并行的事务,执行结果按照某一顺序串行执行的结果一致3、隔离性:事务执行不受其他事务干扰,事务执行的中间结果对其他事务是透明的4、持久性:对任意已提交事务,系统必须保证该事务对数据库改变不被丢失。主键:唯一标识一条记录,不能重复,不允许位空索引:改字段没有重复值,但是可以为空。
2023-06-06 16:48:19
1149
原创 iOS开发多target
这样做的好处是,他们互相不会冲突,不用去关心是否有逻辑的冲突。但,坏处就是如果有共同的地方需要修改就要对拷贝出来的代码进行同时修改,很容易发生遗漏。如果是三个身份呢,你会有3份代码,他们大部分地方是一样的。背景:设想一下有一个场景,一个业务分为多种身份,他们大部分功能是相同的,但是也有自己的差异性。我们希望的是我有common的vc以及不同角色对应的vc,实现不同时机进行不同的跳转。首先,系统给我们提供了两种方式创建,他们创建后的效果不太一样。然后在业务层,判断我们定义的新宏,来进行不同的跳转,即可。
2023-05-06 16:07:30
915
原创 包体积瘦身方案与实施
在2019谷歌开发者大会上,谷歌给出了一个很详细的数据,包体大小每上升6MB,应用下载转化率就会下降1%。不同地区转化率略有差异,APK包体大小每减少10MB ,全球平均下载转化率会提升1.75%,新兴国家代表印度和巴西下载转化率提升2.0%以上,高端市场代表美国和德国下载转化率提升1.5%。分析安装包的构成先把ipa包后缀改成zip然后解压打开,Payload里的app包,查看里边内容。
2023-02-06 11:08:45
821
原创 Git Fork操作与配置
我理解的git fork:将别人(张三)仓库包括文件,提交历史,issues等复制一份到自己的github账号下。我们在可以通过修改本地项目的代码,然后,给(张三)发送一个Merge Request,一旦他(张三)同意,那么自己的修改就提交到了他(张三)的仓库。之前,公司使用最多的是直接git clone公司的仓库,下载到本地后,修改提交到仓库,也就是下图的2、3、4步。但是,有的时候公司并不想让你自己去直接操作公司的仓库。
2023-01-09 14:58:03
5384
1
原创 读SDWebImage源码笔记
SDWebImage最大并发个数:6。 默认下载超时时间 :15s。 默认缓存时间: 一周。1、SDWebImage 下载过程 【其中包括 SDWebImage 缓存策略(二级缓存策略)】imageView sd_setImageWithUrl:placeholder:options:context:progress{}completed{}最外层是一个SDWebImageManager单例,管理着另外两个单例,一个是下载的SDWebImageDownloader,它管理着多个下载操.
2021-03-26 15:26:34
667
原创 利用RAC实现验证码发送逻辑
前言项目中手机验证码登录和注册等页面都有发送验证码的需求。之前一直在使用自己创建定时器来做相应的处理,这段时间在看RAC相关方面的东西,正好看到定时器符合之前的一些设计场景,简单实现一下。导入RAC我练手的项目是Objective-C的项目,所以之前在podfile文件中加入pod ‘ReactiveObjC’, ‘~> 3.0.0’,直接pod install然后,在需要的页面导入头文件#import "ReactiveObjC.h"。具体代码#import "ViewCo
2021-03-22 14:25:31
403
原创 autoreleasepool问题汇总
AutoreleasepoolPage调用autorelease对象最终都是通过AutoreleasepoolPage对象来管理的。AutoreleasepoolPage对象的结构如下Next:指向最新添加的autorelease对象的下一个位置,也就是第一个可以用的位置。thread:当前的线程。parent:指向父节点,第一个节点的parent是nil。Child:指向子节点,最后一个节点的child指向nil。Depth:表示深度。magic:用来校验Autorelease
2021-03-09 11:15:17
642
原创 YYModel内部实现原理
YYModel作为开发过程中模型转换框架,为JSON与数据模型之间的相互转换,提供了高性能的解决方案。之前一直听别人说,YYModel内部实现是KVC进行的属性赋值。也认为是合理的,但是今天查看源码发现,里边其实并不是采用的setValue:forKey:的方式进行赋值的。而是采用了objc_msgSend方法调用了属性的setter方法进行赋值的。以后,跟别人说YYModel里可别再说是KVC了,一看就没有看过源码。下边粘一句赋值源码case YYEncodingTypeNSMutableStr
2021-03-08 15:32:05
1497
原创 解读AFNetworking4.0请求原理
简介AFNetworking4.0 是对NSURLSession的封装,之前版本有NSURLConnection的封装,现在已经被废弃。简单聊一下,为啥AF要弃用之前的NSURLConnection封装,改成对NSURLSession封装。首先,NSURLSession是在iOS7.0的时候苹果推出来的。而NSURLSession又能支持Http2.0的。大家都知道Http是基于TCP协议的,早期的Http是短连接的,每次传输数据都需要重新连接,而每次连接的话需要进行三次握手,这就造成了资源以及
2021-03-08 11:12:31
1527
原创 解读CFRunLoopRef源码
平时开发中我们接触的NSRunLoop比较多。但是,NSRunLoop的api不是线程安全的,所以在一个NSRunLoop中操作另一个NSRunLoop时要格外小心。其中CFRunLoopRef是线程安全的,而且NSRunLoop只是对CFRunLoop的封装。所以,我们可以通过分析CFRunLoop的源码工作原理,来了解NSRunLoop的原理。 苹果已经对CoreFoundation代码开源,我们可以找到CFRunLoop的源码来分析。源码在这里CFRunLoop入口...
2021-03-05 15:10:41
578
1
原创 消息转发机制--拯救你的程序崩溃
前言:之前一直有了解iOS中的消息转发机制,一直没有总结过。这篇文章就当是对之前碎片知识的总结吧。主要涉及到了runtime的消息传递和如果没有找到对象的方法,系统为我们提供的三次拯救机会。废话不多说,直接进行正文。Runtime的消息传递我们都知道OC是一门动态语言。OC语言并不能直接被计算机所识别。需要先转换成C语言,然后转成汇编语言,最后转成计算机认识的机器语言。当我们调用一个对象的方法[objc foo]时,编译器会将代码进行转换成消息发送objc_msgSend(objc f.
2021-03-04 14:03:28
452
1
原创 iOS给readonly属性进行赋值
我们都知道iOS中,是不能通过点方法或者[]方法进行readonly属性的赋值的。如果你执意要调用,那么Xcode会报错,readonly属性是不支持赋值操作的。那么,我们有其他办法给这个readonly的属性赋值吗?这里先写结论,可以。通过KVC的setValue:forKey方法可以给这个属性赋值。这里就涉及到了KVC的知识点了,先说一下KVC的setValue:forKey方法的基本原理吧。第一步:会查找对象的类中是否有满足set<key>格式的方法。如果有,那么直接调
2021-03-04 10:13:27
1803
1
原创 iOS对ipa包进行代码混淆《二》 ---代码混淆
接上一篇文章ipa包砸壳,接下来讲一下代码混淆。混淆代码,我们需要生成两个文件confuse.sh和func.list。confuse.sh是一个脚本文件,里边定义了混淆的一些算法,以及需要混淆方法的路径。func.list是我们列举的一些需要混淆的方法。当然系统的方法不能混淆,不然一些库文件方法没办法正确加载。1、首先,终端cd到文件目录,并且利用指令touch生成这两个文件touch confuse.shtouch func.list不出意外,文件目录里已经有这两个文件了。
2021-02-22 17:56:02
1714
1
原创 iOS对ipa包进行代码混淆《一》 ---砸壳破解
前言:iOS开发中平时很少谈及对项目进行加密操作处理,当然可能是一般的项目安全系数要求并没有那么高。之前有过一个项目经历,被人恶意使用手机验证码,刷掉不少短信费用。当然,问题可能出在Android端,姑且不说是哪一端。既然事情发生了,iOS端也就将项目的加密提上了日程。当然,由于才疏学浅,我只是对项目做了初级的代码混淆。先记录一下,怎么通过ipa包来获取到项目中把存储在mach-O文件的@interface和@protocol信息提取出来,并生成对应的.h文件。这里我们需要借助一个工具Class-dum
2021-02-22 16:36:01
2636
7
原创 _button.enable=NO不起作用
测试在设置弱网环境后,对按钮不断点击,然后触发了多次网络请求。怎么处理呢?点击的时候直接设置按钮的enable=NO,然后网络请求回调后,再设置按钮的enable=YES。然后,设置伪代码_button.enable = NO;[selfjoinCourseWithModel:self.courseModel netRetBack:^{ _button.enable = YES;}];没问题,直接运行,发现弱网环境还是可以连续点击。前后添加打印,发现按钮的en...
2021-01-20 16:17:23
732
原创 宏定义导致三目运算结果不正确
前言:今天记录一下前两天写代码遇到的一个有意思的小问题。这个问题初看很诡异,分析后直击自己知识的浅薄。首先有两个宏定义,以下程序运行均在手机端运行,也就是两个宏定义结果都是YES#define kDeviceiPhone [[UIDevice currentDevice].model isEqualToString:@"iPhone"] ? YES : NO#define kDeviceiPhone [[UIDevice currentDevice].model isEqualToString
2021-01-13 16:14:31
866
原创 《代码整洁之道》读后笔记
勒布朗法则:稍后等于永不(Later equals never)。编程过程中,遇到混乱的地方,需要清理的地方就应该立即行动。否则之后就没有之后了。为什么要保持代码的整洁?混乱的代码会导致更多的混乱增加,团队的生产力持续下降,最终趋向于零。什么是整洁的代码?代码逻辑直截了当,缺陷难以隐藏。减少依赖关系,便于维护。依赖分层完善错误处理代码。性能调至最优,省得引诱别人做没规矩的优化。整洁代码只做好一件事。整洁的代码力求集中,每个函数,每个类和每个模块都全神贯注一事,完全不受周围细节的干扰和
2021-01-05 15:21:35
406
2
转载 iOS中获取WiFi的SSID(CNCopySupportedInterfaces())
ios5之前可以通过读取配置文件获取,ios5以后苹果修改wifi列表文件位置,只有root权限才可以读取.ios4:/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManagerios5:/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration
2021-01-04 13:56:49
4547
原创 自定义面包屑导航
引申:面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现在沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑导航的作用是告诉访问者他们目前在网站中的位置以及如何返回。先看效果图iOS开发过程中是没有这样一个控件可以使用的,所以只能自己造轮子了。简述一下思路:顶部导航其实就是一排自定义的按钮,点击了目录后增加这排导航的按钮,点击了导航按钮就把这个按钮后边的按钮移除。
2020-12-24 17:32:52
654
抽屉效果三方库
2016-05-13
libopencore-amrnb.a及libopencore-amrwb.a支持arm64
2016-05-24
Demo-2.zip
2020-08-12
libidn.a库文件
2016-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅