2010-07-10 75 views
-2

我追问是静态对象内存释放

-(ABC*)createInstance 
{ 
    Static ABC *obj = [[alloc ABC] init]; 

    if(obj == nil) 
    { 
    obj = [[alloc ABC] init]; 
    } 
    return obj 
} 

,才能在客观C写的

[[ABC createInstance] release] 
+1

您的代码是没有意义的,并不会编译。 – 2010-07-10 09:20:07

+0

你试图用代码实现什么? – 2010-07-10 11:58:32

回答

2

是的,如果你还没有覆盖retain/release用户可以发布您的实例。看看common singleton patterns更好的方法。

注:

  • 这是[ClassName alloc],不[alloc ClassName]
  • 如果你的意思是让createInstance类方法使用+ (ABC*)createInstance;
  • 这是static,不Static
  • 您必须初始化objnil
  • 使用self,而不是ABC如果子类是一个问题:[self alloc]
  • 共同的名字,这些方法是sharedInstance
+0

我想补充: 1.你必须**用零来初始化静态存储变量(非原语不起作用)。 2.你应该使用'self'而不是'ABC'来分配(用于子类化)。 3.访问者应该被命名为'sharedInstance'(公共objc样式)。 – 2010-07-10 09:32:22

+0

@Nik:很好的补充,但是1.仅适用于文件范围变量。 – 2010-07-10 09:39:25

+0

1.哦,好,我没有意识到这种差异。 2.它应该是'[self alloc]',因为它是一个类方法(当然)。 – 2010-07-10 09:45:55