项目中小知识点杂记

打算写好久了一直没开始,希望这是个良好的开始。第一次写些简单的吧。

iOS开发中字体大小

设计给的原型图上字体全是以px为单位,换成iOS开发中的font(pt):
pt=px/96 •72


项目中小知识点杂记_第1张图片
pt-px-ps.png

所以开发中可使用宏:define FontSizeWithpx(px) px / 96 * 72

[self class],[self supClass],[super class],[super supClass]区别:

  • 前两者容易区分:对应的分别为本类和父类
  • 后两者容易混淆:super为编译指示器,编译器碰到super时会用本对象去调用其父类中的该方法。所以[super class],[super supClass]输出分别为本类和父类;

用weak还是strong

  • 为什么从xib或storyBoard拖线的UI控件属性为weak?

UI控件默认用weak,根源是苹果希望这样这些UI控件的父View来强引用它们,而viewController只需要强引用viewController.view成员,则可间接的持有所有UI控件。这样做的好处是:在以前,当系统收到Memory Waring时,会触发ViewController的ViewDidUnload方法,这样的弱引用可以让整个View整体得到释放,也更方便冲重建时整体重新构造

  • 自己代码写用weak还是strong?

UI控件用weak还是strong都可以。当UI控件是weak时,它的引用计数是1,持有它的是它的superView,当UI是strong时,它的引用计数是2,持有它的一个是superView一个是strong指针。但UI控件不会持有别的对象,所以什么情况下用strong都没问题。自己写的view成员,最好用strong,因为用weak会有额外的系统维护开销。另外还得注意在赋值前要添加到父view上,否则会提前释放。

block传递变量(值传递或指针传递)

int a=3;
NSString *str=@“LZ";
    void(^block)()=^{
        NSLog(@"%d",a);
        NSLog(@"%@",str);
    };
    a=5;
    str=@“NN";
    block(); 

打印结果为:3,LZ。

__block int a=3;
static NSString *str=@"LZ”;
    void(^block)()=^{
        NSLog(@"%d",a);
        NSLog(@"%@",str);
    };
    a=5;
    str=@“NN";
    block(); 

打印结果为:5,NN。
总结:
如果是局部变量,block是值传递;
如果是静态变量或全局变量或__block,block是指针传递

结语

第一次分享,希望多多指教。也希望自己能长久坚持下去。

你可能感兴趣的:(项目中小知识点杂记)