• IOS学习笔记 -- 基础MVC初学习


    1. @property的参数说明
    ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制
    使用ARC机制,对象的申请和释放工作会在运行时,由编译器自动在代码中添加retain和release
    1> strong:强指针引用的对象,在生命周期内不会被系统释放
    在OC中,对象默认都是强指针
    2> weak:弱指针引用的对象,系统会立即释放
    弱指针可以指向其他已经被强指针引用的对象

    @property参数使用小结:
    1> 控件用weak
    2> 属性对象用strong
    3> 非对象类型用assign
    4> 字符串NSString用copy

    提示:在纯手码实现界面布局时,如果通过懒加载处理界面控件,需要使用strong强指针

    2. 关于九宫格布局的计算方法
    能够公用的常量尽量给抽取出来,以便增加九宫格布局的灵活性,尽量保证做到:
    1> 根据要显示的数据自动调整小格子的位置和数量
    2> 一旦调整了要显示的列数,仅需要修改少量的数值即可做到

    3. 关于UIButton的一些补充
    3.1 按钮的类型
    在iOS的控件中,只有UIButton提供了类方法,可以在实例化按钮时指定按钮的不同类型。
    UIButtonTypeCustom和[[UIButton alloc] init]是等价的
    3.2 修改按钮字体
    在UIButton中有两个对象属性是定义了readonly的:
    1> titleLabel
    2> imageView
    @property中readonly表示不允许修改这两个对象属性的指针地址,但是可以修改其内部的属性

    注意:由于按钮的字体大小是所有状态共用的,因此可以通过
    button.titleLabel.font= [UIFont systemFontOfSize:14.0];
    修改按钮标签文本的字体大小

    但是不能使用 ( button.titleLabel.text = @"下载"; ) 代码设置按钮标签的文本内容,因为按钮标签的文本内容是跟按钮的状态相关的,按钮的默认和高亮状态的文字可能是不同的。

    4. 块动画

    4.1 首尾式动画
    如果只是修改控件的属性,使用首尾式动画还是比较方便的,但是如果需要在动画完成后做后续处理,就不是那么方便了
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:动画持续时间];
    // 修改属性的动画代码
    // ......
    [UIView commitAnimations];

    4.2 块动画
    块动画相对来说比较灵活,尤为重要的是能够将动画相关的代码编写在一起,便于代码的阅读和理解,在IOS中基本都使用块动画
    [UIView animateWithDuration:2.0 animations:^{
    // 修改控件属性动画
    label.alpha = 0.0;
    } completion:^(BOOL finished) {
    // 删除控件
    [label removeFromSuperview];
    }];

    5. 字典转模型
    5.1 字典转模型的好处:
    1> 降低代码的耦合度
    2> 所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率
    3> 在程序中直接使用模型的属性操作,提高编码效率

    模型应该提供一个可以传入字典参数的构造方法
    - (instancetype)initWithDict:(NSDictionary *)dict;
    + (instancetype)xxxWithDict:(NSDictionary *)dict;

    5.2 instancetype & id
    1> instancetype在类型表示上,跟id一样,可以表示任何对象类型
    2> instancetype只能用在返回值类型上,不能像id一样用在参数类型上
    3> instancetype比id多一个好处:编译器会检测instancetype的真实类型

    5.3 在模型中添加readonly属性
    // 定义属性时,会生成getter&setter方法,还会生成一个带下划线的成员变量
    // 而如果是readonly属性,则只会生成getter方法,同时没有成员变量
    @property (nonatomic, strong, readonly) UIImage *image;

    @interface LFAppInfo()
    {
    UIImage *_imageABC;
    }
    - (UIImage *)image
    {
    if (!_imageABC) {
    _imageABC = [UIImage imageNamed:self.icon];
    }
    return _imageABC;
    }
    在模型中合理地使用只读属性,可以进一步降低代码的耦合度。

    5.4 使用数据模型的好处:
    *** 调用方不用关心模型内部的任何处理细节!

    6. XIB
    Xib文件可以用来描述某一块局部的UI界面
    XIB & Storyboard
    相同点:
    1> 都用来描述软件界面
    2> 都用Interface Builder工具来编辑
    不同点
    1> Xib是轻量级的,用来描述局部的UI界面
    2> Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

    7. View的封装思路
    1> 如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
    2> 外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据

    8. xcode一些常用快捷键

    新建
    shift + cmd + n 新建项目
    cmd + n 新建文件

    视图
    option + cmd + 回车 打开助理编辑器
    cmd + 回车 显示主窗口
    cmd + 0 导航窗口
    option + cmd + 0 工具窗口

    在.m & .h之间切换 control + cmd + 上/下
    按照浏览文件的前后顺序切换 control + cmd + 左右

    查看头文件 control + cmd + j
    切换到对应的函数 control + 6 支持智能输入,注意输入法

    运行
    cmd + r 运行
    cmd + . 停止
    cmd + b 编译
    cmd + shift + b 静态内存分析编译,可以检查程序结构上是否存在内存泄露

    排版
    control + i 将选中按钮重新缩进
    cmd + ] 向右增加缩进
    cmd + [ 向左减少缩进
    cmd + / 注释/取消注释,提示:取消注释时,注释双斜线必须在行首
    cmd + 向上 到文件开始位置
    cmd + 向下 到文件末尾位置

  • 相关阅读:
    圣战 [奇环, 树上差分]
    花火之声不闻于耳 [线段树]
    SP2878 KNIGHTS
    P5300 [GXOI/GZOI2019]与或和 [单调栈]
    Speike [线段树, 动态规划]
    Jerry [动态规划]
    JSON对象
    正则书写
    flex布局实践
    数组对象的深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3748497.html
Copyright © 2020-2023  润新知