由於從C++到Objective-C我的轉型過程的一部分,我集中讀書Cocoa and Objective C Up and Running.目標C:類方法說明
在書中代碼的例子之一,有一條線,它沒有什麼意義我與我目前的知識水平:
它是類方法+ (Photo*) photo;
的聲明。
任何人可以解釋我的理由,請作者爲什麼決定該方法(Photo*) photo;
將其申報爲類的方法,而不是的實例方法?
我已經studiet的理論,認爲instane方法是像一個類成員函數和類方法是一樣的東西靜態函數在C++中。但這仍然不能回答我的問題。
下面是聲明代碼:
#import <Foundation/Foundation.h>
@interface Photo : NSObject{
NSString* caption;
NSString* photographer;
}
+ (Photo*) photo;
- (NSString*) caption;
- (NSString*) photographer;
- (void) setCaption: (NSString*)input;
- (void) setPhotographer: (NSString*)input;
@end
的實現代碼如下:
#import "Photo.h"
@implementation Photo
- (id)init
{
self = [super init];
if (self) {
[self setCaption:@"Default Caption"];
[self setPhotographer:@"Default Photographer"];
}
return self;
}
+ (Photo*) photo {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
- (NSString*) caption {
return caption;
}
- (NSString*) photographer {
return photographer;
}
- (void) setCaption:(NSString *)input {
[caption autorelease];
caption = [input retain];
}
- (void) setPhotographer: (NSString *)input {
[photographer autorelease];
photographer = [input retain];
}
- (void)dealloc
{
[self setCaption:nil];
[self setPhotographer:nil];
[super dealloc];
}
@end
該方法聲明,有趣的是,不正確。所有初始化器都應該返回'id',構造器應該使用'self'(它指的是類方法內的類),而不是硬編碼的類名稱。爲了使子類別正常工作,這兩件事是必需的。編輯:我看到bbum已經在下面提到了這一點,但我認爲它重複。 – 2011-06-15 01:12:59
@Josh完全;在下面的meta-answer中進行了擴展。 – bbum 2011-06-15 15:47:17