<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[iOSbird的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iOSbird</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iOSbird]]></copyright><item><title><![CDATA[鸿蒙开发之ArkTs开发布局之层叠布局（Stack）和弹性布局（Flex）]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137148993</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137148993</guid><author>iOSbird</author><pubDate>Wed, 03 Apr 2024 16:59:15 +0800</pubDate><description><![CDATA[层叠布局（StackLayout）用于在屏幕上预留一块区域来显示组件中的元素，提供元素可以重叠的布局。层叠布局通过容器组件实现位置的固定定位与层叠，容器中的子元素（子组件）依次入栈，后一个子元素覆盖前一个子元素，子元素可以叠加，也可以设置位置。层叠布局具有较强的页面层叠、位置定位能力，其使用场景有广告、卡片层叠效果等。Stack组件可以实现容器堆叠，子组件按照顺序依次入栈，后一个子组件覆盖前一个子组件。Stack作为容器，容器内的子元素（子组件）的顺序为Item1->Item2->Item3接口。]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之ArkTs开发布局之线性布局(Row/Column)]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137120924</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137120924</guid><author>iOSbird</author><pubDate>Fri, 29 Mar 2024 16:12:13 +0800</pubDate><description><![CDATA[组件按照布局的要求依次排列，构成应用的页面。在声明式UI中，所有的页面都是由自定义组件构成，开发者可以根据自己的需求，选择合适的布局进行页面开发。布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之ArkUI组件常用组件-CustomDialog/Video]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137117190</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137117190</guid><author>iOSbird</author><pubDate>Thu, 28 Mar 2024 18:42:45 +0800</pubDate><description><![CDATA[使用@CustomDialog装饰器装饰自定义弹窗@CustomDialog装饰器用于装饰自定义弹窗，此装饰器内进行自定义内容build() {Column() {Text("这是弹窗")Text("这是自定义弹窗的内容。。。。")创建构造器，与装饰器呼应相连})点击与onClick事件绑定的组件使弹窗弹出Row() {Button('显示弹窗')})]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之ArkUI组件常用组件-Button/Radio/Slider]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137098786</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137098786</guid><author>iOSbird</author><pubDate>Thu, 28 Mar 2024 10:43:00 +0800</pubDate><description><![CDATA[checked属性可以设置单选框的状态，状态分别为false和true时，设置为true时表示单选框被选中。Button是按钮组件，通常用于响应用户的点击操作，其类型包括胶囊按钮、圆形按钮、普通按钮。该接口用于创建不包含子组件的按钮，其中label用来设置按钮文字，type用于设置Button类型，stateEffect属性设置Button是否开启点击效果。Button有三种可选类型，分别为Capsule（胶囊类型，默认类型）、Circle（圆形按钮）和Normal（普通按钮），通过type进行设置。]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之ArkUI组件常用组件文本输入]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137074124</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137074124</guid><author>iOSbird</author><pubDate>Wed, 27 Mar 2024 21:21:31 +0800</pubDate><description><![CDATA[TextInput、TextArea是输入框组件，通常用于响应用户的输入操作，比如评论区的输入、聊天框的输入、表格的输入等，也可以结合其它组件构建功能页面，例如登录注册页面。TextInput为单行输入框、TextArea为多行输入框。]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之ArkUI组件常用组件图片和文本]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137067290</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137067290</guid><author>iOSbird</author><pubDate>Wed, 27 Mar 2024 12:50:18 +0800</pubDate><description><![CDATA[Text('左对齐')Text('中间对齐')Text('右对齐')TextAlign是枚举，有Start、Center、End。]]></description><category></category></item><item><title><![CDATA[鸿蒙开发之了解ArkTS]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/137049143</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/137049143</guid><author>iOSbird</author><pubDate>Tue, 26 Mar 2024 19:00:43 +0800</pubDate><description><![CDATA[鸿蒙开发者官网  ： https://developer.huawei.com/consumer/cn/开发鸿蒙要用的软件是  DevEco StudioArkTS建立在JS和TS的基础之上，扩展了声明式UI开发范式和状态管理，提供更简洁和自然的开发方式。ArkTS引入了渲染引擎的增强，包括平台无关的自绘制机制、声明式UI后端设计、动态布局等，以提高性能体验。进一步的优化包括代码预编译、高效FFI-Foreign Function Interface、引擎极小化等。ArkTS还构建了跨OS平台的基础设施，以]]></description><category></category></item><item><title><![CDATA[nodejs web服务器 之初始化路由]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/136535475</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/136535475</guid><author>iOSbird</author><pubDate>Thu, 07 Mar 2024 15:52:02 +0800</pubDate><description><![CDATA[每当一个请求到达服务器之后，需要先经过路由的匹配，只有匹配成功之后，才会调用对应的处理函数。在匹配时，会按照顺序进行匹配，请求类型和请求的URL同时匹配成功，返回对应的数据。在这个文件里我写了一个GET和一个POST，对应的路径分别是/api/user/info 和 /api/user/login。这样就简单的做好了路由的demo，当然在实际的项目中不会这么简单，这里只是做一下模拟，后面会涉及到数据库的增删改查等。2、测试POST，用户登录的接口，在apifox上测试。并返回的对应的数据对象。]]></description><category></category></item><item><title><![CDATA[nodejs web服务器 -- 搭建开发环境]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/136529458</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/136529458</guid><author>iOSbird</author><pubDate>Thu, 07 Mar 2024 12:56:15 +0800</pubDate><description><![CDATA[2、创建一个js文件--- appjs 用来处理请求逻辑， 一个文件夹bin，里面创建一个js文件，我这里命名base.js作为入口。author --- 名字+邮箱  ， license --- 授权 ， main -- 入口文件。如上图所示，version -- 版本 ，description -- 描述，  keywords --- 关键词。其中-y的含义是yes的意思，在init的时候省去了敲回车的步骤，如此就生成了默认的package.json文件。这样，我们就完成了开发环境的搭建。]]></description><category></category></item><item><title><![CDATA[Nodejs web服务器之GET、POST请求初次体验]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/136509406</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/136509406</guid><author>iOSbird</author><pubDate>Wed, 06 Mar 2024 18:37:29 +0800</pubDate><description><![CDATA[运行node，并在浏览器上访问   http://localhost:5005/index.js?注意：有时运行 node index.js 是提示端口5005被占用了。1.DNS解析域名，找到ip地址，建立TCP连接，发起http请求。3.客户端接收到返回的数据，处理数据（比如渲染页面）执行 执行 kill 67740 杀死占用的进程即可。2.服务器接收到http请求，进行处理，返回数据。查看哪些进程占用了5005端口。这样就可以处理客户端的POST请求了。]]></description><category></category></item><item><title><![CDATA[iOS 使用LFliveKit和IJKPlayer实现直播]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/136476094</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/136476094</guid><author>iOSbird</author><pubDate>Tue, 05 Mar 2024 20:05:02 +0800</pubDate><description><![CDATA[手机和mac要连接同一个WiFi，并配置代理，设置ip和端口。或者 系统设置-> 网络 -> wifi -> 详细信息。首先搭建nginx+rtmp本地服务器。这样就简单实现了推流和拉流的功能。终端输入  ifconfig。]]></description><category></category></item><item><title><![CDATA[在Mac上安装nginx+rtmp 本地服务器]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/136473668</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/136473668</guid><author>iOSbird</author><pubDate>Tue, 05 Mar 2024 12:36:26 +0800</pubDate><description><![CDATA[Users/mengxianjin/Downloads/test.mp4    测试视频的绝对路径。rtmp://localhost:1935/rtmplive/test  是VCL上的rtmp地址。listen 监听的端口号, rtmp协议的默认端口号是1935。application 访问的应用路径是 rtmplive。2、重启 nginx， 我当前的版本是 1.25.4。这是在VCL上就可以看到推流的视频了。record off;至此，本地的服务器基本安装完成。nginx   再次开启。]]></description><category></category></item><item><title><![CDATA[Masonry 源码简单解析]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118732536</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118732536</guid><author>iOSbird</author><pubDate>Wed, 14 Jul 2021 17:28:11 +0800</pubDate><description><![CDATA[Masonry是一个轻量级的用于自动布局的框架，是对系统的自动布局约束的一个封装。
Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式，让我们可以以链式的方式为我们的控件指定约束。


上面是Masonry的类图，从类图中我们来整体的分析Masonry框架的结构。然后再由整体到部分逐渐的细化，窥探其内部的实现细节。
masonry框架的类结构
根据上面的类图，我们分别看一下框架里面各个类。
1、UIView的分类 - V.]]></description><category></category></item><item><title><![CDATA[Runloop线程常驻]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118724456</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118724456</guid><author>iOSbird</author><pubDate>Wed, 14 Jul 2021 14:53:49 +0800</pubDate><description><![CDATA[在iOS开发过程中，有时一些花费时间比较长的操作阻塞主线程，导致界面卡顿，那么我们就会创建一个子线程，然后把这些花费时间比较长的操作放在子线程中来处理。可是当子线程中的任务执行完毕后，子线程就会被销毁掉。


如果程序中，需要经常在子线程中执行任务，频繁的创建和销毁线程，会造成资源的浪费。
这时候我们就可以使用RunLoop来让该线程长时间存活而不被销毁。

来个案例，在睡眠时，通过硬件获取数据信息（比如心电信息），开始睡眠时，创建runloop，使得子线程常驻，用于写数据到文件
睡眠结束后，退出runl.]]></description><category></category></item><item><title><![CDATA[源码分析之AFNetworking④UIkit+AFNetworking]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118719954</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118719954</guid><author>iOSbird</author><pubDate>Wed, 14 Jul 2021 09:33:16 +0800</pubDate><description><![CDATA[如果需要使用AFNetworking的UIKit扩展时可直接在prefix.pch文件中引入，或者在工程的相关文件中引入。

1、AFAutoPurgingImageCache ：用于缓存图片的类，通过identifier来添加和搜索UIImage
协议中添加图片：
- (void)addImage:(UIImage*)image withIdentifier:(NSString *)identifier;
协议中删除图片
- (BOOL)removeImageWithIdentifier:(NSStri.]]></description><category></category></item><item><title><![CDATA[源码分析之AFNetworking③AFSecurityPolicy和AFURLRequestSerialization]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118706442</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118706442</guid><author>iOSbird</author><pubDate>Tue, 13 Jul 2021 17:29:28 +0800</pubDate><description><![CDATA[首先看一下AFSecurityPolicy的属性：
1、https验证模式，默认无，还有证书匹配和公钥匹配
@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode;
typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
AFSSLPinningModeNone,
AFSSLPinningModePublicKey,
AFSSLPinningModeCertificate,
};
]]></description><category></category></item><item><title><![CDATA[源码分析之AFNetworking ②AFNetworkReachabilityManager]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118705780</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118705780</guid><author>iOSbird</author><pubDate>Tue, 13 Jul 2021 17:16:30 +0800</pubDate><description><![CDATA[AFNetworkReachabilityManager对象用于监听设备当前连接网络的状态。
AFNetworkReachabilityManager提供了4种创建方法：


(instancetype)sharedManager; //创建单例


(instancetype)manager;//创建实例对象


(instancetype)managerForDomain:(NSString *)domain;//根据地址名创建实例对象


(instancetype)managerForAddress]]></description><category></category></item><item><title><![CDATA[源码分析之AFNetworking ①AFURLSessionManager与AFHTTPSessionManager]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/118703461</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/118703461</guid><author>iOSbird</author><pubDate>Tue, 13 Jul 2021 16:35:36 +0800</pubDate><description><![CDATA[首先查看afn的结构，如下：
￼

可以看到AF分为如下5个功能模块：


  网络通信模块（最核心）（AFURLSessionManager、AFHTTPSessionManager）



  网络状态监听模块（Reachability）



  网络通信安全策略模块（Security）



  网络通信信息序列化/反序列化模块（Serialization）



  对于iOS UIkit库的拓展（UIKit）



一、1.网络通信模块-AFURLSessionManager与AFHTTPSes]]></description><category></category></item><item><title><![CDATA[Flutter开发之网络请求]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/116755565</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/116755565</guid><author>iOSbird</author><pubDate>Thu, 13 May 2021 17:29:46 +0800</pubDate><description><![CDATA[项目中展示的大部分数据都是来自服务器，我们需要向服务器请求数据，并且对他们进行解析展示。

一. 网络请求的方式

在Flutter中常见的网络请求方式有三种：HttpClient、http库、dio库。

1、HttpClient

HttpClient是dart自带的请求类，在io包中，实现了基本的网络请求相关的操作。

网络调用通常遵循如下步骤：

创建 client.
构造 Uri.
发起请求, 等待请求，同时您也可以配置请求headers、 body。
关闭请求, 等待响应.
解码响应的内容.
.]]></description><category></category></item><item><title><![CDATA[Flutter开发之滚动Widget]]></title><link>https://blog.youkuaiyun.com/iOSbird/article/details/116654413</link><guid>https://blog.youkuaiyun.com/iOSbird/article/details/116654413</guid><author>iOSbird</author><pubDate>Tue, 11 May 2021 17:34:39 +0800</pubDate><description><![CDATA[移动端数据量比较大时，我们都是通过列表来进行展示的，比如商品数据、聊天列表、通信录、朋友圈等。
在Android中，我们可以使用ListView或RecyclerView来实现，在iOS中，我们可以通过UITableView来实现。
在Flutter中，我们也有对应的列表Widget，就是ListView。

一、ListView
1.1、ListView的基本使用

ListView可以沿一个方向（垂直或水平方向，默认是垂直方向）来排列其所有子Widget。

一种最简单的使用方式是直接将所有需要排列的.]]></description><category></category></item></channel></rss>