您的位置:首页 > 移动开发 > IOS开发

iOS中关于属性@property和@synthesize的问题:

2015-09-30 15:47 573 查看
1.之前一直以为属性@property是不需要实例化的。所以没有实例化这个概念了。在项目中,model里的一些属性也是直接调用一些框架的。所以也不需要在代码里实例化。再一般而言,xib中的一些View,button也是不需要用代码去实例化的。

和@property对应的是@synthesize方法。Xcode编译器会自动添加@synthesize xx=_xx;这样子的代码。

@synthesize是自动生成setter,getter 方法。 

我以为自动生成的代码,是下面这种形式。但实际上,下面这段代码是延迟加载(延迟实例化),在项目中也会经常看到这样的getter方法。

- (NSMutableArray *)operandStack  

{  

    if (_operandStack == nil) {  

        _operandStack = [[NSMutableArray alloc] init];  

    }  

    return _operandStack;  

}  

- (void)setOperandStack:(NSMutableArray *)operandStack  

{  

    _operandStack = operandStack;  

}  

2.关于NSString属性:

NSString并不是基本属性,不过它可以这样初始化:

1⃣️NSString * str = @"";

2⃣️NSString * str = [[NSString alloc]initwithformat:@"..."];

所以把另一个NSString对象t 复制给 str。

所以即使声明了

@property nsstring * str;

也需要先对str初始化再赋值。如:

-(NSString *)score
{
   if (_score ==nil) {
       _score =
@"";
    }
   return
_score;
}

- (NSMutableArray *)operandStack  

{  

    if (_operandStack == nil) {  

        _operandStack = [[NSMutableArray alloc] init];  

    }  

    return _operandStack;  



//以上两种方式都属于延迟实例化编码 

- (void)setOperandStack:(NSMutableArray *)operandStack  

{  

    _operandStack = operandStack;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: