【iOS Programming: The Big Nerd Ranch Guide】【笔记】2

本文深入探讨了Objective-C中的ARC内存管理机制,包括栈、堆、自动引用计数、弱引用等概念。同时详细介绍了@property的使用方式,如读写属性、readonly与readwrite的区别,以及内存属性(strong、weak、copy、assign)。还讲解了Autorelease、view、CGRect参数单位、UIView的frame与bounds区别、头文件与实现文件中属性的区别、ViewController生命周期、KVC等核心知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值