#import "fjcViewController.h"@interface fjcViewController ()
@property (weak, nonatomic) IBOutlet UIButton *iconButton;
@property (nonatomic,strong) UIButton *cover;
//
@end
@implementation fjcViewController
// 懒加载
- (UIButton *)cover
{
if (_cover == nil ) { // ***(1)这里为什么不能能用self.cover
_cover = [[UIButton alloc] initWithFrame:self.view.bounds];
self.cover.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
[self.view addSubview:_cover];
self.cover.alpha = 0.0;
[self.cover addTarget:self action:@selector(smallImage:) forControlEvents:UIControlEventTouchUpInside];
}
return _cover;// ***(2)这里为什么不能能用self.cover
}请教:1 请问什么在红色的那两行里面只能用 _cover ,而不能用self.cover.
2 请问在绿色的地方为什么用_cover 和self.cover.都行啊,,,
求问这两点语法和self语法在这里的细节区别。self是调用了自动生成的get语法,_cover是声明的时候就自动生成的。不过这有什么区别啊?
@property (weak, nonatomic) IBOutlet UIButton *iconButton;
@property (nonatomic,strong) UIButton *cover;
//
@end
@implementation fjcViewController
// 懒加载
- (UIButton *)cover
{
if (_cover == nil ) { // ***(1)这里为什么不能能用self.cover
_cover = [[UIButton alloc] initWithFrame:self.view.bounds];
self.cover.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
[self.view addSubview:_cover];
self.cover.alpha = 0.0;
[self.cover addTarget:self action:@selector(smallImage:) forControlEvents:UIControlEventTouchUpInside];
}
return _cover;// ***(2)这里为什么不能能用self.cover
}请教:1 请问什么在红色的那两行里面只能用 _cover ,而不能用self.cover.
2 请问在绿色的地方为什么用_cover 和self.cover.都行啊,,,
求问这两点语法和self语法在这里的细节区别。self是调用了自动生成的get语法,_cover是声明的时候就自动生成的。不过这有什么区别啊?
如果你在这个方法里用了下面这个语句
if (self.cover == nil );逻辑上就行不通,因为你在这里调用self.cover他会再一次进入这个方法,理论上就会死循环
而_cover是直接值访问的,他不会调用get/set方法,所以就不会有这个问题.至于绿色的地方为什么可以就很好理解了吧,虽然他也会进入get方法,但是他已经不等于nil了.会直接返回他本身,所以没有问题.
如果你在这个方法里用了下面这个语句
if (self.cover == nil );逻辑上就行不通,因为你在这里调用self.cover他会再一次进入这个方法,理论上就会死循环
而_cover是直接值访问的,他不会调用get/set方法,所以就不会有这个问题.至于绿色的地方为什么可以就很好理解了吧,虽然他也会进入get方法,但是他已经不等于nil了.会直接返回他本身,所以没有问题.