<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HuberCui的博客]]></title><description><![CDATA[iOS小白开发遇到的问题和总结]]></description><link>https://blog.youkuaiyun.com/HuberCui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HuberCui]]></copyright><item><title><![CDATA[fastlane安装]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/131010384</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/131010384</guid><author>HuberCui</author><pubDate>Fri, 02 Jun 2023 17:01:13 +0800</pubDate><description><![CDATA[运行一下bundle update就可以更改Gemfile.lock中的依赖版本。fastlane 安装有两种方式：brew 和gem。会自动安装最新版本fastlane，安装目录在。Gemfile中可以指定fastlane版本。目前没有发现如何安装过往版本和多个版本。可以有多个fastlane。1.brew 安装与卸载。2.gem安装与卸载。]]></description><category></category></item><item><title><![CDATA[fastlane 打包增加版本号报错]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/125250562</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/125250562</guid><author>HuberCui</author><pubDate>Sun, 12 Jun 2022 21:52:23 +0800</pubDate><description><![CDATA[fastlane的使用]]></description><category></category></item><item><title><![CDATA[Flutter ios打包报错 cannot load such file — sqlite3 (LoadError)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/124606763</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/124606763</guid><author>HuberCui</author><pubDate>Fri, 06 May 2022 11:46:44 +0800</pubDate><description><![CDATA[Flutter命令行 flutter build ipa 打包报错


cannot load such file — sqlite3 (LoadError)
xcode kernel_require rb require usr/bin/ipatool:24
The data couldn’t be read because it isn’t in the correct format





[+14639 ms] 2021-12-27 17:25:00.807 xcodebuild[13713:5.]]></description><category></category></item><item><title><![CDATA[记一次Android studio卡在启动页]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/124417762</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/124417762</guid><author>HuberCui</author><pubDate>Tue, 26 Apr 2022 00:01:29 +0800</pubDate><description><![CDATA[某天早上打开电脑，Android Studio卡在了启动页，折腾半天没有解决，然后安装低版本AndroidStudio可以运行，但是项目报错。。。



最终，删除了 ~/Library/Caches/Google中的对应AndroidStudio文件夹，重启！！
...]]></description><category></category></item><item><title><![CDATA[Future小例子]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/122651982</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/122651982</guid><author>HuberCui</author><pubDate>Sun, 23 Jan 2022 15:27:52 +0800</pubDate><description><![CDATA[void eventLoopDemo() {
  print('eventLoopDemo #1 of 2');
  Future.microtask(() =&gt; print('microtask #1 of 3'));
  //使用delay方式，是将此task放到queue的尾部，
  //若前面有耗时操作，不一定能准时执行
  new Future.delayed(
      new Duration(seconds: 1), () =&gt; print('event #1 (delaye.]]></description><category></category></item><item><title><![CDATA[如果有两个Xcode，Flutter如何选择]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/122635168</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/122635168</guid><author>HuberCui</author><pubDate>Sat, 22 Jan 2022 11:47:47 +0800</pubDate><description><![CDATA[sudo xcode-select --switch /Applications/Xcode12.5.app/Contents/Developer

指定Xcode12.5.app

再执行


sudo xcodebuild -runFirstLaunch 


]]></description><category></category></item><item><title><![CDATA[Flutter环境配置]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/122488333</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/122488333</guid><author>HuberCui</author><pubDate>Fri, 14 Jan 2022 10:14:26 +0800</pubDate><description><![CDATA[vim ~/.bash_profile 新建文件  open ~/.bash_profile

vim ~/.zshrc 新建文件  open ~/.zshrc


 export ANDROID_HOME="/Users/yaobangmang/Library/Android/sdk"
 export PATH=${PATH}:${ANDROID_HOME}/tools
 export PATH=${PATH}:${ANDROID_HOME}/platform-tools
 export PUB...]]></description><category></category></item><item><title><![CDATA[记一次iOS与H5交互导致上线差点延迟的问题]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/122158938</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/122158938</guid><author>HuberCui</author><pubDate>Sun, 26 Dec 2021 19:03:49 +0800</pubDate><description><![CDATA[临时测试到的iOS版本

低版本：iOS14.3及一下

高版本：iOS14.7及以上

我们这里用了




- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

}

可以用来拦截H5界面点击事件的Url,]]></description><category></category></item><item><title><![CDATA[关于NestedScrollView中的SliverAppBar的expandedHeight动态获取]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/115398655</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/115398655</guid><author>HuberCui</author><pubDate>Fri, 02 Apr 2021 14:56:37 +0800</pubDate><description><![CDATA[在写项目使用NestedScrollView折叠的时候，遇到一个问题，FlexibleSpaceBar中的内容需要动态展示，有的需要数据返回来可能隐藏，导致高度不定，但是SliverAppBar中expandedHeight只能固定写死，所以只能另寻其他途径获取这个高度。



copy一份FlexibleSpaceBar中的代码，另外写进一个StatelessWidget中，设置一个GlobalKey。
	现在需要处理请求，在请求成功的回调中这样写，利用请求成功的第一帧来获取高度
	
WidgetsBi.]]></description><category></category></item><item><title><![CDATA[flutter构建的漫画app]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/106695061</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/106695061</guid><author>HuberCui</author><pubDate>Thu, 11 Jun 2020 19:05:20 +0800</pubDate><description><![CDATA[用flutter构建了有妖气漫画，主体阅读功能已经实现，搜索等其他页面后续会加上，欢迎来踩！

https://github.com/HuberCui/CartoonFlutter


]]></description><category></category></item><item><title><![CDATA[Flutter中ListView顶部有空白]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/106503679</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/106503679</guid><author>HuberCui</author><pubDate>Tue, 02 Jun 2020 20:02:29 +0800</pubDate><description><![CDATA[ListView头部有一段空白区域，是因为当ListView没有和AppBar一起使用时，头部会有一个padding，为了去掉padding，可以使用MediaQuery.removePadding 包裹这个ListView


MediaQuery.removePadding(context: context,removeTop: true, child: _buildListView('aaa'))

如下图对比


...]]></description><category></category></item><item><title><![CDATA[XB_多线程(安全)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103615865</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103615865</guid><author>HuberCui</author><pubDate>Thu, 19 Dec 2019 18:23:28 +0800</pubDate><description><![CDATA[1块资源可能会被多个线程共享，也就是多个线程可能会访问同一块资源。 比如多个线程访问同一个对象、同一个变量、同一个文件。 当多个线程访问同一块资源时，很容易引发数据错乱和数据安全问题。
	使用线程同步技术（同步，就是协同步调，按照预定的先后次序进行），常见的线程同步技术是:加锁
	线程同步方案：OSSpinLock 、os_unfair_lock 、pthread_mutex 、dispatch_...]]></description><category></category></item><item><title><![CDATA[XB_多线程（1）]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103615329</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103615329</guid><author>HuberCui</author><pubDate>Thu, 19 Dec 2019 15:49:42 +0800</pubDate><description><![CDATA[1.下面代码打印什么？


- (void)test2
{
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    dispatch_async(queue, ^{
        NSLog(@"1");
        // 这句代码的本质是往Runloop中添加定时器，注意：已经拿到RunLoop，并添加定...]]></description><category></category></item><item><title><![CDATA[XB_RunLoop(应用)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103613512</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103613512</guid><author>HuberCui</author><pubDate>Thu, 19 Dec 2019 15:15:24 +0800</pubDate><description><![CDATA[1.控制线程生命周期（线程保活）


 [[MJThread alloc] initWithBlock:^{
        NSLog(@"%@----begin----", [NSThread currentThread]);
        
        // 往RunLoop里面添加Source\Timer\Observer
        [[NSRunLoop currentRun...]]></description><category></category></item><item><title><![CDATA[XB_RunLoop]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103609771</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103609771</guid><author>HuberCui</author><pubDate>Thu, 19 Dec 2019 14:07:49 +0800</pubDate><description><![CDATA[1.RunLoop对象

iOS中有两套API来访问和使用RunLoop

CoreFoundation框架：CFRunLoopRef，是开源的

Foundation框架：NSRunLoop，基于CFRunLoopRef的一层OC包装

2.获取RunLoop对象

[NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象

CFRunLoopGetCur...]]></description><category></category></item><item><title><![CDATA[XB_runtime(应用)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103601370</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103601370</guid><author>HuberCui</author><pubDate>Wed, 18 Dec 2019 17:43:11 +0800</pubDate><description><![CDATA[例子：

  1.可以获取成员变量信息，也可以设置和获取成员变量的值

  可以用来对模型赋值json解析的数据，也可以通过KVC对未公开的成员变量进行修改

 


 self.textField.placeholder = @"请输入用户名";
    
    [self.textField setValue:[UIColor redColor] forKeyPath:@"_...]]></description><category></category></item><item><title><![CDATA[XB_runtime(消息发送)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103594076</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103594076</guid><author>HuberCui</author><pubDate>Wed, 18 Dec 2019 17:12:39 +0800</pubDate><description><![CDATA[前言：

前言1.方法的底层结构


struct method_t{
   SEL name; //函数名
   const char *types;//编码（返回值类型、参数类型）
   IMP imp;//指向函数的指针（函数地址）
}

SEL代表函数名，一般叫做选择器，底层结构跟char *类似
   

可以通过@selector() 合sel_registerName()获...]]></description><category></category></item><item><title><![CDATA[Class中的isa指针本质]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103526937</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103526937</guid><author>HuberCui</author><pubDate>Fri, 13 Dec 2019 15:51:15 +0800</pubDate><description><![CDATA[1.iOS存储优化

BOOL类型占1字节，如何将多个BOOL类型数据存储在一个字节中？可以用一字节的每一位表示一个BOOL类型

实现原理


#import "Person.h"
#define TallMask (1&lt;&lt;0) //表示1左移一位：0b 0000 0001
#define RichMask (1&lt;&lt;1) //表示1左移一位：0b 0000 0010
#d...]]></description><category></category></item><item><title><![CDATA[XB_block(3)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103460503</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103460503</guid><author>HuberCui</author><pubDate>Mon, 09 Dec 2019 17:51:22 +0800</pubDate><description><![CDATA[1.__block的内存管理

我们已经知道，__block修饰符会把auto变量包装成一个对象

1.当block在栈上时，并不会对__block变量产生强引用
	2.当block被copy到堆时，会调用block内部的copy函数，copy函数内部会调用_Block_object_assign函数， _Block_object_assign函数会对__block变量形成强引用（retain），...]]></description><category></category></item><item><title><![CDATA[XB_block(2)]]></title><link>https://blog.youkuaiyun.com/HuberCui/article/details/103453017</link><guid>https://blog.youkuaiyun.com/HuberCui/article/details/103453017</guid><author>HuberCui</author><pubDate>Mon, 09 Dec 2019 12:36:35 +0800</pubDate><description><![CDATA[1.block的copy

在ARC环境下，编译器会在以下情况下自动将栈上的block复制到堆上

block作为函数的返回值

typedef void (^MJBlock)(void);
MJBlock myblock(int age)
{
    return ^{
        NSLog(@"---------%d",age);
    };
}

int main(int argc,...]]></description><category></category></item></channel></rss>