У меня было несколько вопросов относительно моего объективного кода C, который я написал, и надеялся, что кто-то может помочь устранить мои сомнения. Это мой код до сих пор:Objective-C Self and Synthesize Ключевые слова
Это мой заголовок файла:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@property NSString *name;
@property NSString *favoriteFood;
@property NSString *sound;
@property float weight;
-(instancetype) initWithName:(NSString *) defaultName;
-(void) getInfo;
-(float) getWeightInKg: (float) weightInLbs;
-(NSString *) talkToMe: (NSString *) myName;
-(int) getSum: (int) num1
nextNumber: (int) num2;
@end
Это мой файл Реализация:
@implementation Animal
- (instancetype)init
{
self = [super init];
if (self) {
self.name = @"No Name";
}
return self;
}
-(instancetype) initWithName:(NSString *) defaultName{
self = [super init];
if (self) {
self.name = defaultName;
}
return self;
}
-(void) getInfo{
NSLog(@"Random Info About Animal");
}
-(float) getWeightInKg:(float)weightInLbs{
return weightInLbs * 0.4545;
}
-(NSString *) talkToMe:(NSString *)myName{
NSString *response = [NSString stringWithFormat: @"Hello my name is %@", myName];
return response;
}
-(int) getSum: (int) num1 nextNumber: (int)num2{
return num1 + num2;
}
@end
Это мой main.m файл:
#import <Foundation/Foundation.h>
#import "Animal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Animal *dog = [[Animal alloc]init];
[dog setName:@"Bro"];
NSLog(@"The Dog's name is %@", [dog name]);
Animal *newDog = [[Animal alloc]initWithName:@"Spot"];
NSLog(@"The Dog's weight is equal to %.2f", [newDog getWeightInKg:50]);
NSLog(@"5 + 3 = %d", [newDog getSum:5 nextNumber:3]);
NSLog(@"%@", [newDog talkToMe:@"Bob"]);
}
return 0;
}
У меня было несколько вопросов относительно этого кода Я написал:
1) Когда я определить такие свойства, как:
@property NSString *name;
@property NSString *favoriteFood;
@property NSString *sound;
мне нужно синтезировать эти свойства в моем файле реализации, чтобы получить-акцессоры методы ли? Я немного запутался в этом, так как в моем файле main.m я смог использовать метод setter ([dog setName: @ "Bob"]) для свойства: "@property NSString * name;" хотя я не синтезировал это свойство в своем файле реализации.
2) Кроме того, допустим, что я синтезирую свою собственность имени, выполнив:
@synthesize name = _name;
Что представляет _name? Я читал в Интернете, что это соглашение синтезировать свойство, подобное этому, но что является точкой синтеза и как я могу использовать «_name» в моих файлах реализации или main.m?
3) В моем файле реализации в методе «- instancetype» init мы называем self = [super init]? Что именно возвращает эта строка «super init» в скобках?
4) Также в моем файле реализации, когда я пишу self.name = @ "No Name", к чему относится это ключевое слово self? Я читал в Интернете, что «сам относится к фактическому объекту, который выполняет текущий метод». Но мой вопрос в том, какой объект является этим ключевым словом self, ссылающимся на мой код, когда я делаю self.name = @ «No Name»?
Один вопрос на вопрос, пожалуйста. –
Soulchined Огромное спасибо! Это сообщение действительно прояснило все мои сомнения! – LP496
Да, извините, включая четыре вопроса в одном сообщении. Я буду следить за этим в следующий раз. – LP496