0
#import "PsychologistViewController.h"
#import "HappinessViewController.h"

@interface PsychologistViewController()
@property (nonatomic) int diagnosis;
@end

@implementation PsychologistViewController

@synthesize diagnosis = _diagnosis;

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{
       if ([segue.identifier isEqualToString:@"ShowDiagnosis"]) {
        [segue.destinationViewController setHappiness:self.diagnosis];
       } 
       else if ([segue.identifier isEqualToString:@"Celebrity"]) {
        [segue.destinationViewController setHappiness:100];
       } 
       else if ([segue.identifier isEqualToString:@"Serious"]) {
        [segue.destinationViewController setHappiness:20];
       } 
       else if ([segue.identifier isEqualToString:@"TV Kook"]) {
        [segue.destinationViewController setHappiness:50];
       }
}

****- (void)setAndShowDiagnosis:(int)diagnosis****
{
    self.diagnosis = diagnosis;
    [self performSegueWithIdentifier:@"ShowDiagnosis" sender:self];
}

-(IBAction)flying
{
    [self setAndShowDiagnosis:85];
}

-(IBAction)apple 
{    
[self setAndShowDiagnosis:100];
}

-(IBAction)dragons
{
    [self setAndShowDiagnosis:20];
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

@end

我的问题与- (void)setAndShowDiagnosis:(int)diagnosis方法有关。此方法在任何 .h 文件中的任何地方都未声明为公共的,显然它也不是私有的。我的问题是为什么会这样?它只显示了它的 setter 实现,但实际的方法声明却没有出现。任何有助于澄清这一点的帮助表示赞赏。哦,这是来自在线讲座,一切都编译得很好并且可以运行。

4

3 回答 3

1

方法不需要公开、私下或以其他方式声明。在 .h 文件中声明方法可以让其他用户了解这些方法的类知识。通过不声明它,您将该方法隐藏在使用该类的程序的其余部分中。

于 2012-06-13T20:23:06.310 回答
0

如果您希望它们是私有的,则不必声明方法。在objective-c中没有私有方法之类的东西。

在头文件中声明方法和在实现文件顶部声明类扩展之间的区别在于,如果您没有在头文件中声明它,并且您使用另一个类的方法,那么编译器会警告您该方法可能不存在。但是只要您实现了该方法,应用程序就不会崩溃并且该方法将被调用。

你可以不在任何地方声明任何方法,但你会收到很多编译器警告,以后更难阅读,其他人也更难理解你的代码。并且由于您错过拼写方法名称或其他一些小错误而导致崩溃的可能性更大。

于 2012-06-13T20:26:51.070 回答
0

此方法在任何 .h 文件中的任何地方都未声明为公共的,显然它也不是私有的。

我想你回答了你自己的问题,它没有被宣布,因为它没有被宣布。除非我读错了?

于 2012-06-13T20:20:47.600 回答