是否有方法從同一個類中的另一個方法調用類方法?從該類中調用類方法
例如:
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
是否有方法從同一個類中的另一個方法調用類方法?從該類中調用類方法
例如:
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
當然。
假設有定義這些方法:
@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];
}
在一類方法中,self
指類被傳遞消息。所以,從另一個類方法中(說classMethodB),用途:
+ (void)classMethodB
{
// ...
[self classMethodA];
// ...
}
從一個實例方法(比如instanceMethodB),使用中:
- (void)instanceMethodB
{
// ...
[[self class] classMethodA];
// ...
}
注意,你既不是假定哪一類消息。實際的類可能是一個子類。
您調整了術語。 '[self foo]'用於實例方法,'[MyClass bar]'用於類方法。 –
不是。 「self」的含義取決於你傳遞的信息。如果你給一個班級發信息,那麼「自我」就是班級。如果你發送一個實例,'self'就是實例。我在http://qualitycoding.org/factory-method/ –
中解釋了消息自我對類方法的重要性。同意,你在評論中說的是真實的,但是你答案中的術語實際上是倒退的。在實例方法中使用'[self class]'沒有太大意義,但它在類方法中是完全有意義的。請記住,實例方法以'-'開始,類方法以'+'開始,使用'self'來引用對象的實例具有語法意義,但是使用'[self class]'來引用對象的實例在句法上沒有意義。 '[self class]'涉及引用描述類的對象,而不是類的實例。 –
在目標C中,'self'用於調用同一個類中的其他方法。
所以,你只需要編寫
+classMethodB{
[self classMethodA];
}
'self'只適用於實例方法,但問題表明他在說話關於類方法(在方法名前加'+號) –
首先,我們說怎麼要發送消息給法?不是如何調用方法?這是在obj-c中說的方法。 – doNotCheckMyBlog
你試過了嗎?發生了什麼? –
@Craftero你不是指發送消息給對象嗎?消息不會發送到方法。 –