我仍然对指针和内存管理(从ObjC和Cocoa开始)感到困惑。让我思考的是这段代码:
double seconds = [[NSDate date] timeIntervalSince1970];
这就是我的理解:
seconds
我不明白的是我是在创建NSDate
对象(=类NSDate
的实例)吗?这个对象只是暂时的吗?
我一直认为创建一个对象并让对象持久化的方法(至少在ARC进入或者在函数结束时被销毁)是创建一个指向它的指针。也许是这样的:
NSDate *now = [NSDate date];
[now timeIntervalSince1970] // get the value
这是否意味着在我的原始示例中,在堆上创建了NSDate
的一些未命名(没有指向它的变量)实例,一旦它返回浮点值,它就会从堆中删除?
答案 0 :(得分:2)
这是否意味着在我的原始示例中,有一些未命名的(没有 指向它的变量)在堆上创建的NSDate实例 一旦它返回浮点值,它就会从堆中删除吗?
是的,这完全正确。
ARC将在超出范围时删除该对象。
即使在ARC之前,对象也会被创建为autorelease
并在下次通过事件循环时释放(或者每当最近的自动释放池耗尽时)。