2011-09-02 56 views
25

是否有方法從同一個類中的另一個方法調用類方法?從該類中調用類方法

例如:

+classMethodA{ 
} 

+classMethodB{ 
    //I would like to call classMethodA here 
} 
+0

首先,我們說怎麼要發送消息給法?不是如何調用方法?這是在obj-c中說的方法。 – doNotCheckMyBlog

+0

你試過了嗎?發生了什麼? –

+0

@Craftero你不是指發送消息給對象嗎?消息不會發送到方法。 –

回答

8

應儘可能簡單:

[MyClass classMethodA]; 

如果不工作,請確保您有在類的接口中定義的方法簽名。 (通常在.h文件中)

+1

這是一種方法;但是,這不會考慮分類。在大多數情況下,使用[self classMethodA]可能更爲明智。正如我在類方法中所理解的那樣,「self」將是類對象(因爲類方法是類的實例方法)。因此,MyClass的方法將被調用,但不會調用MyClassSubclass的classMethodA – csga5000

+0

還要注意,他在「同一類中」的問題中提到 – csga5000

3

當然。

假設有定義這些方法:

@interface MDPerson : NSObject { 
    NSString *firstName; 
    NSString *lastName; 

} 

+ (id)person; 
+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast; 
- (id)initWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast; 


@property (copy) NSString *firstName; 
@property (copy) NSString *lastName; 

@end 

第一2類方法可以如下實施:

+ (id)person { 
    return [[self class] personWithFirstName:@"John" lastName:@"Doe"]; 
} 

+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast { 
    return [[[[self class] alloc] initWithFirstName:aFirst lastName:aLast] 
                 autorelease]; 
} 
59

在一類方法中,self指類被傳遞消息。所以,從另一個類方法中(說classMethodB),用途:

+ (void)classMethodB 
{ 
    // ... 
    [self classMethodA]; 
    // ... 
} 

從一個實例方法(比如instanceMethodB),使用中:

- (void)instanceMethodB 
{ 
    // ... 
    [[self class] classMethodA]; 
    // ... 
} 

注意,你既不是假定哪一類消息。實際的類可能是一個子類。

+1

您調整了術語。 '[self foo]'用於實例方法,'[MyClass bar]'用於類方法。 –

+8

不是。 「self」的含義取決於你傳遞的信息。如果你給一個班級發信息,那麼「自我」就是班級。如果你發送一個實例,'self'就是實例。我在http://qualitycoding.org/factory-method/ –

+0

中解釋了消息自我對類方法的重要性。同意,你在評論中說的是真實的,但是你答案中的術語實際上是倒退的。在實例方法中使用'[self class]'沒有太大意義,但它在類方法中是完全有意義的。請記住,實例方法以'-'開始,類方法以'+'開始,使用'self'來引用對象的實例具有語法意義,但是使用'[self class]'來引用對象的實例在句法上沒有意義。 '[self class]'涉及引用描述類的對象,而不是類的實例。 –

4

在目標C中,'self'用於調用同一個類中的其他方法。

所以,你只需要編寫

+classMethodB{ 
    [self classMethodA]; 
} 
+1

'self'只適用於實例方法,但問題表明他在說話關於類方法(在方法名前加'+號) –