Objective-C / Cocoa创建发布顺序?

时间:2009-11-23 14:12:26

标签: objective-c cocoa

我很好奇,如果为对象发布表达的顺序应反映其在层次结构中的顺序相反:

// Psuedo code
alloc OBJ_001;
alloc OBJ_001 > OBJ_002;
alloc OBJ_001 > OBJ_002 > NSSting;

release NSString;
release OBJ_002;
release OBJ_001;

我很确定它应该(对我有意义),但到目前为止我的学习中还没有提到这一点。

加里

2 个答案:

答案 0 :(得分:1)

没关系。我假设您的意思是OBJ_001拥有OBJ_002拥有NSString实例,并拥有所有三个对象(与OBJ_002共同拥有NSString并与{共同拥有OBJ_002 {1}})。

按相反顺序执行:

  1. 释放NSString实例:没有任何反应,因为OBJ_001仍然拥有它。
  2. 发布OBJ_002:没有任何结果,因为OBJ_002仍然拥有它。
  3. 发布OBJ_001:它释放OBJ_001,释放NSString。全部三个dealloc。
  4. 以相同的顺序执行:

    1. 发布OBJ_002:它释放OBJ_001,然后释放。 OBJ_002仍然存在,因为您仍然拥有它。
    2. 发布OBJ_002:它释放NSString,然后释放。 NSString仍然存在,因为你仍然拥有它。
    3. 释放NSString实例:它deallocks。
    4. 无论哪种方式,所有三个实例都是dealloc。没有区别。

      我更喜欢相反的顺序,但这纯粹是一种风格选择。

答案 1 :(得分:0)

我不这么说,只要你完成使用它,你可以随时发布它。