@class和#import在另一个视图控制器上,这意味着什么?

时间:2013-10-04 07:40:43

标签: ios objective-c class

我是Xcode的新手,并试图找出有关xcode编码的更多信息。

所以,我试图在目标C上学习更多关于模型(模型操作)的知识。

我对PhotoViewController.h和.m文件中的@Class声明感到困惑

如下所示,我已经在appdelegate.m和PhotoViewController.m文件中导入了Photo.h

我的教程中的目标是PhotoViewController.m文件可以识别self.photo.filename

但是,为什么必须在PhotoViewController.h文件中添加@Class和@property?

isnt #import命令已经足够了吗? @Class是什么意思以及为什么它也必须包含@property?

注意:我试图在@class上发表评论(//),但xcode告诉我找不到照片属性,当我在属性上添加评论(//)

PhotoViewController.m文件也搞砸了无法识别的照片属性。

我不太明白,同时使用@class和#import,再加上声明@property照片

这是Photo.m

#import "Photo.h"

@implementation Photo

-(id)init
{
    self = [super init];
    return self;
}

@end

Photo.h

#import <Foundation/Foundation.h>

@interface Photo : NSObject
@property (weak, atomic) NSString *title;
@property (strong, nonatomic) NSString *detail;
@property (strong, nonatomic) NSString *filename;
@property (strong, nonatomic) NSString *thumbnail;
@end

Appdelegate.m

#import "AppDelegate.h"
#import "FeedTableViewController.h"
#import "ProfileViewController.h"
#import "FavoritesViewController.h"
#import "Photo.h"


@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    Photo *photo= [[Photo alloc]init];
    photo.title = @"Demo Photo";
    photo.detail = @"This is a demo photo";
    photo.filename = @"demo.png";
    photo.thumbnail = @"demo-thumb.png";


    return YES;
}
@end

PhotoViewController.h文件

#import <UIKit/UIKit.h>
@class Photo;
@interface PhotoViewController : UIViewController

@property (weak, nonatomic) NSString *imageFileName;
@property (weak, nonatomic) NSString *imageTitle;
@property (strong, nonatomic) Photo *photo;
@end

PhotoViewController.m文件

#import "PhotoViewController.h"
#import "UIImageView+AFNetworking.h"
#import "Photo.h"

@implementation PhotoViewController

-(void)viewDidLoad {
//    self.title = self.imageTitle;
    UIImageView *imageView = [[UIImageView alloc] init];

    [imageView setImageWithURL:[UIImage imageNamed:self.photo.filename]];
    imageView.frame = CGRectMake(10,10,300,300);

    [self.view addSubview:imageView];

    UILabel *imageTitleLabel = [[UILabel alloc] init];
    imageTitleLabel.text = self.imageTitle;
    imageTitleLabel.frame = CGRectMake(11,320,300,40);

    [self.view addSubview:imageTitleLabel];
}

@end

2 个答案:

答案 0 :(得分:1)

@class Photo定义了Photo类到PhotoViewController.h的存在,允许您声明照片属性。 照片属性稍后在PhotoViewController.m中用于访问实例变量照片,如self.photo[self photo]

您可以将#import "Photo.h"放在PhotoViewController.h中,但这样更清晰:)

答案 1 :(得分:0)

@属性

用于替换getter方法,只要你想获得值,就必须将该变量声明为属性,这样就不需要单独编写getter方法了,

你应该在Photo.m中实现@synthesize,@ synthesize将作为setter方法。