问题描述
#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString * name;@end
这样就直接能使用p.name了。好像不需要如下定义:
#import <Foundation/Foundation.h>@interface Person : NSObject{NSString* _name;}@property NSString * name;@end
这两种方式有啥区别呢?
问题解答
回答1:我的经验来说,建议是全部用property定义名字,这样能分清楚变量内存操作方式(多线程实在太少,可以忽略)。并且,对于我来说,这是更容易辨清全局变量的方法之一,在m文件中直接使用_name,可以快速理解这是全局变量。我认为,使用property来做全局变量是个非常好的习惯。另外,@freewolf这里讲到的synthesize其实可以省略。这里用一个简单的setter来举例。
#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic,retain) NSString * name;@end
#import 'Person.h'@implementation Person//下一步可以省略@synthesize name = _name;-(void) setName:(NSString *)name{ name = _name;}@end回答2:
@property NSString * name;// 这个等于下面的(编译器会自动帮你处理)//.h文件{ NSString *_name;}// (线程处理方式, 内存操作方式)@property(atomic, copy) NSString * name;// .m文件// 属性名对应的成员变量是@synthesize _name = name;