iOS声明变量用大括号和@property的区别

2018-08-30  本文已影响0人  th先生
一、
#import <Foundation/Foundation.h>
 
@interface Person : NSObject
 
@property (nonatomic, copy) NSString *name;
 
@end

二、

#import <Foundation/Foundation.h>
 
@interface Person : NSObject
 {
     NSString *_name;
 }
@end

三、

#import <Foundation/Foundation.h>
 
@interface Person : NSObject
 {
     NSString *_name;
 }
@property (nonatomic, copy) NSString *name;

@end

方式三的写法是一种过时的声明变量的方式,xcode在早期@systhesize没有自动合成属性器之前,需要手写 getter与setter方法,下划线从风格上表明这是类的内部变量,要是需要直接使用变量则需要使用get或者set的方式。

在XCode目前有了自动合成属性器后,编译器会自动帮我们生成一个以下划线开头的的实例变量,所以我们不必去同时声明属性与变量。 我们可以直接用@property的方式来声明一个成员属性,在.m文件中使不使用@systhesize都无所谓,xcode会自动帮你生成getter与setter.

外部点语法等方式访问该属性时都通过getter,setter方式访问的。@property修饰的name属性相当于大括号里定义的_name属性(@property实际上生成_name变量。所以.m文件中访问该属性时用_name或者self.name来访问,name是直接访问内存,self.name是调用getter方法)。其实在大括号中的属性可以不带下划线的,只是为了符合以前的书写习惯。

上一篇 下一篇

猜你喜欢

热点阅读