2010-07-14 3 views

ответ

2

Доступ к переменным экземпляра возможен с помощью оператора указателя на структуру.
Вам не нужно свойство для этого:

+ (MyClass *)sharedInstance 
{ 
    @synchronized(self) 
    { 
     if(instance == nil) 
     { 
      instance  = [ [ self alloc ] init ]; 
      instance->iVar = @"someValue"; 
     } 
    } 
    return instance; 
} 
+0

Это работает, спасибо :) – Spanky

0

Вам нужен экземпляр для вызова метода экземпляра. Итак, создайте экземпляр и вызовите его методы или используйте методы класса.

Должен ли я изменить эти методы экземпляра быть классными методами?

Если методы не связаны с экземпляром, может быть хорошей идеей изменить их на методы класса.

+0

Спасибо. Я могу вызвать методы экземпляра из метода класса, это переменные экземпляра, которые дают мне проблемы. Как установить значения для переменных экземпляра в методе класса? Как я могу объявить эти переменные, чтобы их можно было использовать в методе класса? – Spanky

+0

Ну, так как ваш класс является одноэлементным, вы можете его создать, а затем получить доступ к его переменным экземпляра. Если это не вариант для вас, единственное другое решение, о котором я могу думать, это использовать статические переменные, которые обычно уродливы. – zvone

0

Этот метод инициализации для примера. Это так, как я это делаю ...

-(id)initWithName:(NSString *)name { 
    if(self = [super init]) { 
     self.name = name; 
    } 
    return self; 
} 

В этом случае переменной экземпляра также должно быть свойство. Иначе вы не можете написать self.name.

Сандро

+0

Groovy, но ваш метод является методом экземпляра «-», я пытаюсь получить доступ к переменным экземпляра из метода класса «+». – Spanky

0

Чем я не знаю, что вы имеете в виду. Вы хотите установить переменную экземпляра? Это возможно. (См. Пример ниже). Но если вы хотите получить доступ к нему, это невозможно. Потому что они не существуют в классе. Они существуют только в объекте ... Пример:

+(YourClass *)YourClassWithName:(NSString *)name { 
    if(self = [super init]) { 
     self.name = name; 
    } 
    return [self autorelease]; 
} 

Если вы не имели в виду, что я не знаю, что вы имели в виду. ^^

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