0

是在头文件中声明时分配和初始化对象,还是需要在我的实现中分配和初始化对象?

其中哪一个是正确的?

.h

@interface myViewController : UIViewController

@property (nonatomic, strong) UIImageView *bgImageView;

@end 

.m
- (void)viewDidLoad
{
if (!self.bgImageView) {

        NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/Background.png"];

        self.bgImageView.image = [UIImage imageWithContentsOfFile:fullpath];

        [self.view addSubview:self.bgImageView ];
        [self.view sendSubviewToBack:self.bgImageView ];

}

或者

.h

@interface myViewController : UIViewController

@property (nonatomic, strong) UIImageView *bgImageView;

@end 

.m 

- (void)viewDidLoad
{
if (!self.bgImageView) {

        NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/Background.png"];

        self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:fullpath]];

        [self.view addSubview:self.bgImageView ];
        [self.view sendSubviewToBack:self.bgImageView ];

}
4

2 回答 2

2

对象属性nil在 Objective-C 中显式设置为避免其他语言可能存在的未初始化对象问题。

非对象属性设置为零版本(即为CGFloat0.000000,NSRange为 {0,0},BOOL为 NO)。

因此,您的第二个代码是正确的,尽管如果您在self.bgImageView之前的任何时间self.bgImageView.image = ...(例如,在init您的视图控制器的方法中loadView或什至在上面的行中self.bgImageView.image)分配和初始化,您的第一个代码也可以工作。

于 2013-07-28T07:36:49.400 回答
1

将 alloc 和 init 放在 .m 文件中,如果其他 VC 需要访问该对象,则仅将 @property 放在 .h 中,否则也将其放在 .m 中。

测试你自己的代码,最好的学习方式

于 2013-07-28T07:20:15.173 回答