2010-07-10 2 views
-2

Моего Questing являетсястатичного освобождения памяти объекта

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

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

мы можем написать в Objective C

[[ABC createInstance] release] 
+1

Ваш код не имеет никакого смысла и не компилируется. –

+0

Чего вы пытаетесь достичь с помощью кода? –

ответ

2

Да, пользователи могут освободить свой экземпляр, если вы не переопределяетесь retain/release. Взгляните на common singleton patterns для лучшего подхода.

Примечания:

  • Это [ClassName alloc], не [alloc ClassName]
  • Если вы имели в виду, чтобы сделать createInstance вариант использования метода класса + (ABC*)createInstance;
  • Это static, не Static
  • Вы должны инициализировать obj - nil
  • Использование self вместо ABC если подклассов является проблемой: [self alloc]
  • Общее название для этих методов является sharedInstance
+0

Я бы добавил: 1. Вы ** должны ** инициализировать статическую переменную хранилища с помощью nil (не-примитивы не работают). 2. Вы должны использовать 'self' вместо' ABC' для выделения (для подкласса). 3. Аксессуар должен быть назван 'sharedInstance' (обычный стиль objc). –

+0

@Nik: Хорошие дополнения, но 1. применяется только к переменным области видимости файла. –

+0

1. О, хорошо, я не знал об этой разнице. 2. Это должен быть '[self alloc]', поскольку это метод класса (конечно). –

Смежные вопросы