Objective-C 基础(三)

Logging Information

NSLog 输出到stderr,使用NSString对象类型,而不是C字符串,NSString是@"like this"的格式,并且不可修改的,可以用%@ 来打印对象的description如 NSLog(@”Make: %@", make);

 

Basic Memory Management

每一个对象都有保留数1,在MRR机制时候,可以手工进行release 对象;

Managing Memory with MRR
此机制下,对象在方法的开始到结束整个里面需要进行创建及释放,

- (void) properMRRMethod
{
NSArray *array = [[NSArray alloc] init];
// use the array here
[array release];
}

可以用 autorelease 方法将对象设置为自动释放
NSArray *array = [[[NSArray alloc] init] autorelease];

object-creation class methods 建立的对象,则是会自动返回一个autorelease 的对象,如[NSArray array],

Never rely on an object’s retainCount to keep track of how often it has already been
retained. If you want to make absolutely sure you own an object, then retain it, use it, and
release it when you’re done.

 

Managing Memory with ARC

在ARC里面,不需要手工保留或释放对象,全部对象释放由编译器负责,

NSArray *array = [[NSArray alloc] init];
and
NSArray *array = [NSArray array];  都是同样的作用;

在默认的情况下,对象变量都是 strong ,因为其内容在对象生命周期里都是可以保持的;

自定义的object-creation class methods 不用设置为autorelease,

+ (Car *) car
{
// ARC implicitly adds autoreleasing
return [[Car alloc] init];
}

 strong
声明为strong类型的对象会在执行时期自动保留且在生命周期结束前都是有效,结束后会自动释放;

weak
弱引用,当对象的变量指针被设为nil时,对象将会被释放;

由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字:

__bridge只做类型转换,但是不修改对象(内存)管理权;

__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;

__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。

转载于:https://www.cnblogs.com/ivancoding/archive/2013/02/01/2840164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值