最近粗糙笔记(11.25-12.10)

1、ffb400 和red ,green, blue的转换

前两位对应red,中间两位对应green,后两位对应blue

2、 为什么需要堆栈

转自http://bbs.csdn.net/topics/390840859

 要问Java为什么要堆栈,那就要问C为什么要堆栈,问C为什么要堆栈就要问以前写汇编的为什么写着写着就喜欢把内存分两块来用,至于这个问题你跑去C板块和汇编板块估计都没几个人能让你信服地说清楚原因。

首先汇编里,变量的概念几乎没有了,有的只是各种内存地址,不管是实地址还是虚地址,你访问一个变量就是靠地址,所以如果你不记住一个变量的地址,你就没办法去操作它,这就产生了问题,如果你的程序要1000个变量,你就把他们的地址全记下来吗?这显然是不现实的,首先这会浪费很多空间,因为几乎任何操作都离不开操作变量,也就是地址,那么就相当于你要用两倍甚至更多的空间来表示你的程序,而一半浪费在地址上,其次这样写程序也是没有效率的,1000个变量,难道你能把他们的地址全背下来吗?或者说当你看到地址0x1234的值赋值给地址0x2345时,你如何记得起0x1234和0x2345是两个干什么用的变量?
       所以以一种系统的方法管理内存就显得尤为重要,毕竟我们要用计算机来方便自己,而不是拿来自虐。经过很多人的摸索,人们发现变量主要是两种形式,一种内容短小(比如一个int整数),需要频繁访问,但是生命周期很短,通常只在一个方法内存活,而另一种内容可能很多(比如很长一个字符串),可能不需要太频繁的访问,但生命周期较长,通常很多个方法中可能都要用到,那么自然将这两类变量分开就显得比较理性,一类存储在栈区,通常是局部变量、操作符栈、函数参数传递和返回值,另一类存储在堆区,通常是较大的结构体(或者OOP中的对象)、需要反复访问的全局变量。
堆区就是各种慢,申请内存慢,访问慢,修改慢,释放慢,整理慢(或者说GC垃圾回收),但优点也不言而喻,访问随机灵活,空间超大,在不超可用内存的情况下你要多大就给多大。
       栈区就像临时工,干完就跑,所以超快,但是缺点也很多,比如生命周期短,一般只能在一个方法内存活,又比如你需要事先知道需要多大的栈(事实上绝大多数语言栈区要分配的大小编译期就确定了,Java就是这样),而且通常最大栈区可用内存都很小,你不可能往栈区里堆很多数据。

3、约束问题

现象:self.sendWidthConstraint.constant =  150,但contant对-150有效,对[button autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:150]有效,但是设置size就没问题

解决:其实不是设置无效,而是应该是-150这个方向一定要搞明白

如果要让被设置的视图靠近屏幕中间,必做的规律是:

距离底部要填负值

距离顶部要填正值

距离右边要填负值

距离左边要填正值

但是写入[btn autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:50];里面得都填正值

为什么基本原理还是基于左上角为零点的坐标体系,向右和向下值都变大

self.btnContraint =  [btn autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:50];这里要填正值

因为sdk里面将这个值替换为负值了。

 

同理设置相对值的时候:

距离右边和距离底部的set都要设置为负值,距离左边的和顶部的都要设置为正值。

英文:let bottom = NSLayoutConstraint(item: base, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)

let right = NSLayoutConstraint(item: base, attribute: .right, relatedBy: .equal, toItem: view, attribute: .right, multiplier: 1, constant: 0)

参考链接:

https://stackoverflow.com/questions/42995934/bottom-and-right-constraints-of-view-are-negative

Try to think this way: treat the second item as the origin(把第二个相对物作为原点). if the value is positive, the first item is to the right / bottom direction of the second item(如果是正的,第一个必定是右下方向). if the value is negative, that means the direction is to the left and top to the second item.Since you want to put view inside the base, and you want positive value in constraint, you need to use base as first item, and view as second item (origin) in the constraint. So it means base is to the right/bottom to view when the constant of the constraint is positive .

4、app H5白屏问题

好的链接

(1)、https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA

 

(2)、https://www.jianshu.com/p/de67f5a752b6

 

(3)、https://www.jb51.net/article/126800.htm

 

初步原因:

WKWebView是一个多进程组件,Network Loading以及UI Rendering在其它进程中执行。所以UIWebView上当内存占用太大的时候,App Process会crash;而在WKWebView上当总体的内存占用比较大的时候,WebContent Process会crash,从而出现白屏现象。

 

现象:

(1)、返回出现白屏

(2)、写的demo没问题

 

思路:

(1)、能不能清除内存呢

(2)、demo看上去很简单,但是我们的项目很复杂,是不是我们在代理方法里面或者其他方法里面做了处理,而这个方法有错误的

(3)、返回时viewDidAppear或者方法里面做了什么呢,导致crash了

(4)、返回时要走的所有方法里打断点,看看有什么结果

(5)、base类文件太多了,好处一个解决了很多问题,但是问题就是导致这个页面占的内存太多。

 

结果:问题还是没解决,改用native实现了。

 

5、使用RTRootNavigationController注意,很多方法失灵,比如self.nav 以及滑动返回的

 self.rt_disableInteractivePop = NO;//放开滑动返回

去掉就可以测试那个bug了

 

 objc_setAssociatedObject(self, @selector(rt_disableInteractivePop), @(rt_disableInteractivePop), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    RTRootNavigationController *nav = self.rt_navigationController;

    BOOL isRootVC = self == nav.viewControllers.firstObject;

    if (rt_disableInteractivePop) {

      nav.interactivePopGestureRecognizer.delegate = nil;

      nav.interactivePopGestureRecognizer.enabled = NO;

    } else {

      nav.interactivePopGestureRecognizer.delegate = nav;

      nav.interactivePopGestureRecognizer.enabled = !isRootVC;

  }

 

为什么一定要这么写才行呢

因为self.navigationcontroller是RTContainerNavigationControllerInternal

这个,并不是RTRootNavigationController这个

用self.rt_navigationcontroller可以的

(但也只要设置一个就行了)   nav.interactivePopGestureRecognizer.enabled = NO;

但是设置nav.interactivePopGestureRecognizer.delegate = nil就不行

6、如何让cgsize本地化

测试结论

(1)、不能将size 或者size的cgsize值放入字典的object,用归档存入plist文件

(2)、但是字符串是可以的

(3)、dic.write或者arr.write方法会将之前的替换掉

(4)、不能保存为中文文件夹,数字可以

7、崩溃了不一定有崩溃日志,点击organise — crashes不一定有。

8、Unicode是什么

与UTF的区别

https://www.cnblogs.com/gavin-num1/p/5170247.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值