汽油降价最新消息:Objective-C内存管理的几点总结 | 1个饼
来源:百度文库 编辑:偶看新闻 时间:2024/04/27 22:50:52
Objective-C内存管理的几点总结
如果你对Objective-C已经很了解,那么复习下内存管理的规则吧:
在<
- 当你使用new,alloc或copy创建对象时,对象的count retain到1。你一定要负责把这个对象release或autolease掉。这样当它的生命周期结束时,它才能清空。When you create an object using new, alloc, or copy, the object has a retain count of 1. You are responsible for sending the object a release or autorelease message when you’re done with it. That way, it gets cleaned up when its useful life is over.
- 当你使用其他方法获得一个对象时,你可以认为它已经retain了一个count,并且autolease掉了。你不用考虑和它相关的清理问题。 但是如果你想保留这个对象,那么你需要retain它,并且要确保之后你release了这个对象。When you get hold of an object via any other mechanism, assume it has a retain count of 1 and that it has already been autoreleased. You don’t need to do any fur- ther work to make sure it gets cleaned up. If you’re going to hang on to the object for any length of time, retain it and make sure to release it when you’re done.
- 如果你retain一个对象,你最终总是需要release或者autolease它。If you retain an object, you need to (eventually) release or autorelease it. Balance these retains and releases.
这三条规则在写代码的时候一定要遵守,一旦遵守了一般也就不会有内存泄露的问题。
创建对象
ObjectiveC中创建对象分为alloc和init两步,alloc是在堆(heap)上初始化内存给对象变量,把变量(指针)设为nil。每个类可以很多init方法,且每个方法都以init开头,但每个类只有一个特定(designated)的init方法,NSObject是init;
,UIView是- (id)initWithFrame:(CGRect)aRect;
。在子类的designated方法中一定要调用父类的designated方法,子类其他的init方法只能调用子类自己的designated方法,不能调用父类的(即使用self而不是super)。
Reference Counting(引用计数)
ObjectvieC的内存管理机制,略。
下面是一些小知识点:
- 当你想暂时保留对象时,使用autolease ? 1 2 3 4 5
- (Money *)showMeTheMoney:(
double
)amount {
Money *theMoney = [[Money alloc] init:amount];
[theMoney autorelease];
return
theMoney;
}
- 集合类的autolease,一种方法是像对象一样调用autolease,另外也可以调用[NSMutableArray array],最好的方式 return [NSArray arrayWithObjects:@“Steve”, @“Ankush”, @“Sean”, nil];,其他类似的方法返回的对象都是autolease的对象 ? 1 2 3
[NSString stringWithFormat:@“Meaning of %@ is %d”, @“life”, 42];
[NSDictionary dictionaryWithObjectsAndKeys:ankush, @“TA”, janestudent, @“Student”, nil];
[NSArray arrayWithContentsOfFile:(NSString *)path];
- 集合类对新增的对象拥有ownership
- @”string”是autorelease的
- NSString一般是copye而不是retain
- 你应该尽快release你拥有的对象,越快越好。建议创建完对象后就写好release的代码。
- 当最后一个对象owner release后,会自动调用dealloc函数,在类中需要重载dealloc,但永远都不要自己去调用dealloc
- @property一般直接返回对象变量,我们可以把它理解为返回的是autolease的对象。
- 使用@synthesize实现时,@property可以指定setter函数使用retain,copy或assign。assign一般用在属性一定会随着对象的消亡而消亡的,比如controller的view,view的delegate。
- Protocols可以理解为抽象接口,delegat和dataSource基本都是用protocol定义的。
哪里可以找到Objective-C中文资料
关于内存使用的几点疑惑
旅游管理的实习总结怎么写
WINDOWS管理的内存
C++的内存管理
总结不等式组解集的几种情况
管理评审汇报总结
企业库房管理总结
aggressive objective
特大防汛抗旱经费管理使用情况的总结
我想下载有关于饭店管理总结汇报的文章
高三的同学一般晚上学到几点.怎样应对学校管理电源问题?
L7手机的内存管理
再帮我总结几条!好的有加分
谁能总结一下几种离子的鉴别?谢谢!
内存管理
我的C盘不知道为什么多了1点几G的东西
我的C盘不知为什么多了1点几G的东西
为什么我C盘里的文件只有2点几G.可是以用空间却是4点几G的?正常吗?
win2003最大能管理多大的内存???
linux可以管理多大的内存
属于内存管理任务的是什么?
object 和objective 都有目标的意思,怎么区别啊?
请问那位有保洁管理的总结或对于保洁公司的认识的文章