OC中每一个类都有一个.h文件和.m文件,
.h文件存放公共的API,其他模块可以调用,
.m文件文件存放私有API和所有的接口实现。
示例:
Card.h 文件:
#import <Foundation/Foundation.h>
@interface Card : NSObject
@property (strong,nonatomic) NSString *contents;
@property (nonatomic,getter=isChosen) BOOL chosen;
@end
Card.m 文件:
#import "Card.h"
// 通过类别声明私有成员
@interface Card()
@property (strong, nonatomic) NSMutableArray *cards;
@end
// 类实现
@implementation Card
@synthesize contents = _contents;
@synthesize chosen = _chosen;
-(instancetype) init
{
if (self = [super init]) {
// 初始化设置
}
return self;
}
// 在getter中初始化成员变量
-(NSMutableArray *) cards
{
if (!_cards)
_cards = [[NSMutableArray alloc] init];
return _cards;
}
-(NSString *) contents
{
return_contents;
}
-(void) setContents:(NSString *)contents
{
_contents = contents;
}
@end
注意:
使用NSObject必须包含头文件 #import<Foundation/Foundation.h>。
@synthesize contents = _contents; 为属性分配实例对象。
@property 语句会自动在 implementation 中生成 @synthesize、getter、setter 语句,但是这些自动生成代码对用户不可见。
在 @property 声明中的几个关键字:
strong 强指针表示,只要强指针指向的这块内存,有至少一个强指针指向它,这块内存就不会从堆中被释放,当没有强指针指向这块内存时,这块内存立即被释放;
weak 弱指针表示,只要弱指针指向的这块内存,有至少一个强指针指向它,则该弱指针也指向它,当没有强指针指向这块内存时,该弱指针被自动设为nil。
一个属性,要么是强指针,要么是弱指针。
nonatomic 非原子性表示,该属性的 getter 和 setter 不是线程安全的,不能有两个线程同时设置该属性。
getter=method 重设getter方法的名称