【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; 

原文地址:https://www.cnblogs.com/afluy/p/5018963.html