zoukankan      html  css  js  c++  java
  • 【iOS Programming: The Big Nerd Ranch Guide】【笔记】2

    ARC内存管理

    栈用于存储方法的局部变量

    堆用于存储对象

    ARC Automatic Reference Counting 自动引用计数

    弱应用(weak reference)用于避免循环引用导致的内存释放不了的问题

      

    @property

    属性的名称是成员变量的名称去掉下划线,申明了属性后会自动在编译期生成带下划线的成员变量和相应的setter、getter方法

     

    @property的属性

    读写属性 

    readonly(只读)  只生成getter

    readwrite(读写)  生成setter和getter

     

    内存属性

    strong  强引用

    weak   弱引用

    copy    对象拷贝 多用于 NSString NSMutableString NSArray NSMutableArray

    为了避免其他操作对该对象的影响

    assign   基础类型变量 

     

    注意:如果覆写(override)了一个属性setter和getter方法,编译器就不会自动生成相应的成员变量,需要开发者自己声明

    @synthesize age = _age;  

    @synthesize age;  OR @synthesize age = age; 只生成setter、getter方法,不生成成员变量

       

    Autorelease

    主要用于生成对象并返回的类方法中

    比如:

    + (BNRItem *)someItem

    {

        BNRItem *item = [[[BNRItem alloc] init] autorelease];

        return item;

    }

      

    @autoreleasepool{} 当这个方法块运行结束,所有对象将会被引用计数-1

     

    View

    一个view是UIView的实例或者是它的子类

    view可以绘制自己

    view可以响应触摸等事件

    view存在于一个view树,这个树的根节点是应用的window对象

     

    为了避免循环引用,属性superview都是弱应用

      

    CGRect中的参数的单位都是“点”而不是像素,这样就不用考虑适配不同分辨率的问题

    在视网膜屏幕上,一个点代表四个像素(2x2),普通屏幕上一个点就表示一个像素

     

    UIView的frame和bounds的区别

    bounds是view的内部坐标系,frame代表本身在superview坐标系的信息

     

    在头文件和实现文件(*.m)中声明属相的区别

    在头文件中声明的属性和方法对外部是可见的,在实现文件中声明的对外部不可见

     

    ViewController

     一个ViewController的view只有在需要显示在屏幕上时才会创建,这个中懒加载的方式可以节约内存提高性能

     

    ViewController有两种方法创建它的视图树:

    1.在代码中覆写UIViewController的loadView方法

    2.在Interface Builder中创建NIB文件

     

    当一个ViewController创建后他的view属性是为nil的,这时就会调用loadView方法

     

    - (BOOL)application:(UIApplication *)application

        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用UIView的setRootViewController方法设置一个rootViewController,并且加载其view添加到window中,并且自动设置该view的大小和window的大小一致

     

    viewDidLoad只会在ViewController的生命周期中调用一次,viewWillAppear每次重新出现在屏幕都会回调

     

    ViewController生命周期

    http://blog.csdn.net/ryantang03/article/details/8264072

     

    KVC (key-value coding)

    - (id)valueForKey:(NSString *)k;
    - (void)setValue:(id)v forKey:(NSString *)k; 

  • 相关阅读:
    海量数据处理
    mysql数据导出
    手机归属地
    如何正确合理的建立MYSQL数据库索引
    Java 复杂excel报表导出
    NullpointerException真的一定要被预防?
    代码传递信息方式的探究
    ThreadLoacl的反思
    Codis分布式锁
    spring mvc:事务引起的try/catch失效
  • 原文地址:https://www.cnblogs.com/afluy/p/5018963.html
Copyright © 2011-2022 走看看