2010-07-14 71 views

回答

2

可以使用結構指針運算符訪問實例變量。
您不需要屬性:

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

這工作,謝謝:) – Spanky 2010-07-14 18:28:36

0

您需要一個實例來調用實例方法。所以,要麼創建一個實例並調用它的方法,要麼使用類方法。

我應該將那些實例方法 更改爲類方法嗎?

如果這些方法與實例無關,將它們更改爲類方法可能是一個好主意。

+0

謝謝。我可以從類方法調用實例方法,它是給我帶來麻煩的實例變量。如何在類方法中爲實例變量設置值?我怎麼能聲明這些變量,以便它們可以用於該類的方法? – Spanky 2010-07-14 09:54:14

+0

那麼,因爲你的類是一個單例,你可以實例化它,然後訪問它的實例變量。 如果這不是您的選擇,我能想到的唯一的其他解決方案是使用靜態變量,這通常是醜陋的。 – zvone 2010-07-14 12:43:04

0

此init方法爲例。這是我的方式...

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

在這種情況下,實例變量還需要是一個屬性。否則你不能寫self.name

Sandro

+0

Groovy,但你的方法是一個實例方法「 - 」,我試圖從類方法「+」訪問實例變量。 – Spanky 2010-07-14 10:26:40

0

比我不知道你的意思。你想設置一個實例變量?這是可能的。 (見下面的例子)但是如果你想訪問它,這是不可能的。因爲他們不存在於課堂上。它們只存在於一個對象... 例子:

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

如果你不是那個意思,我不知道你是什麼意思。 ^^

相關問題