В процессе перехода с C++ на Objective-C я интенсивно читал книгу Cocoa и Objective C запущены и работают.
В одном из примеров кода книги есть строка, которая не имеет для меня смысла с моим нынешним уровнем знаний:
Это объявление метода класса + (Photo*) photo;
.
Может ли кто-нибудь объяснить мне причину, почему автор решил объявить метод (Photo*) photo;
как метод класса вместо метода экземпляра?
Я изучил теорию о том, что метод экземпляра является чем-то вроде функции-члена класса, а этот метод класса чем-то вроде статической функции в 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
и долженreturn [[[self alloc] init] autorelease];
(одна строка или две, не имеет значения - просто следует напрямую ссылаться на класс). Как бы то ни было,Photo
будет проблемой для подкласса. 15.06.2011Photo
будет проблемой для подкласса. Я новичок в Obj-C и хотел бы получить некоторое представление. 15.06.2011