自己写的一些笔记

1. 有没有想过为什么字符串修饰一般都是用copy 而不是用strong 或者 assgin ? 这些他们有什么区别呢?

    比如: @property (nonatomic, strong/retain/assgin) NSString *strongString;

                @property (nonatomic, copy) NSString *copyedString;

将一个不可变的字符串 string  分别赋值给他们 然后接着更改string 的值 

自己写的一些笔记_第1张图片
不可变类型赋值

这时你会发现.虽然更改了string 的值  但是 strongString. copyedString 的值没有发生改变

然后你将一个可变的 string2  分别赋值给他们 然后接着更改string 的值

自己写的一些笔记_第2张图片
可变类型赋值

这时你会发现.虽然更改了string2 的值  .copyedString 的值没有发生改变 但是 strongString 发生改变了 这是怎么回事呢?

  这是因为 你可以分别打印。strongString 和  copyedString 的地址观察, strongString 和  string2 他们指向的是同一个地址,代表的是同一个对象,你改变其中的任何一个值 ,另一个会跟着发生变化, copyedString 这里做了一次深拷贝 ,栈里有一个新的指针指向堆里一个新的对象,所以你改变string2 的值  copyedString 也所以当我们不希望 NSString * 修饰的对象始终不改变的话用copy 去修饰 如果想让它改变可以用强引用strong/retain/assgin修饰

注意: 其实将 @property (nonatomic, strong) NSMutableString *strongString;

                        @property (nonatomic, copy) NSMutableString *copyedString;

                          换成可变数据类型结构是一样的 可以试一下

2.  什么时候用到layoutSubviews  setNeedsLayout ?

        layoutSubviews  : layoutSubviews 是uiview 的属性 只要是继承uiview 都会有这个方法,layoutSubviews对Subviews 的重新布局,默认是不做任何事情的,当我们想更新子试图的位置的时候 通过layoutSubviews 这个方法  可以实现对子试图的重新布局  那什么情况下会触发layoutSubviews 呢?

       2.1  init 初始化的时候不会出发 layoutSubviews

       2.2 addSubview  会出发layoutSubviews 

       2.3 设置Frame 会出发 layoutSubviews 前提 Frame 设置的前后值发生了变化

        2.4 滚动UIScrollView  也会触发 layoutSubviews

        2.5 旋转screen 时 会触发父视图的layoutSubviews

        2.6 改变uiview 的大小的时候也会触发layoutSubviews

       建议: 只在layoutSubviews  修改布局 不建议写其他的

3.  awakeFromNib ?

在加载完xib 或者storyboard 之后会调用awakeFromNib 这个方法,那么你可以在这个方法里面去修改子试图的布局

4.   招一个靠谱程序猿 面试题:

自己写的一些笔记_第3张图片
这是一个死锁

这是一个死锁 只会打印  a  打印完 a 程序就会crash 

自己写的一些笔记_第4张图片
非死锁

这样的话打印的是a b c

5. ViewControler 在没有指向的时候 点击pop 的时候会走delloc   方法 这个控制器会被释放


6. 换一种风格 采用markdown 的形式重新记录笔记 

    自己写的一些笔记二  地址: http://www.jianshu.com/p/17164140e071





你可能感兴趣的:(自己写的一些笔记)