我不确定您是否要处理一个类,两个实例,两个单独的类。我将尝试给出每个示例,并尝试解释代码在做什么。
单类,两个实例
鱼.h
@interface Fish : NSObject
@property (nonatomic, assign) int x;
@property (nonatomic, assign) int y;
- (void) someMethod;
@end
因此,您正在定义一个名为 FishA 的新对象,该对象有 2 个公共属性,x 和 y。括号中的 2 项 nonatomic 和 assign 告诉编译器有关属性的额外信息。Bassicalynonatomic
意味着不担心线程安全,assign
意味着属性是基本类型,而不是对象。
鱼米
#import "Fish.h"
@implementation Fish
@synthesize x = _x;
@synthesize y = _y;
- (id) init {
self = [super init];
if (self) {
// Initilize default values
// Only use the _x and _y in init
// no other place
_x = 0;
_y = 0;
}
return self;
}
- (void) someMethod {
// Set the values
self.x = 10;
self.y = 10;
// Access the values
NSLog(@"X: %d", self.x)
NSLog(@"Y: %d", self.y)
}
因此,@synthesize
语句将为您创建两种方法,一种用于设置值,另一种用于获取值。在上面的语句中,告诉编译器为属性x
创建方法,是属性的内部存储变量的名称。最好将属性和内部存储分开命名,它使代码更清晰,更容易理解发生了什么。x
_x
在init
该方法中,我们直接使用初始值设置内部变量。该init
方法通常是您要访问内部变量的唯一位置。
采用
#import "Fish.h"
- (void) example {
Fish *fishA = [[Fish alloc] init];
Fish *fishB = [[Fish alloc] init];
fishA.x = 10;
fishB.x = 20;
[fishA someMethod];
[fishB someMethod];
}
单独的类
鱼A.h
@interface FishA : NSObject
@property (nonatomic, assign) int x;
@property (nonatomic, assign) int y;
@property (nonatomic, assign) int size;
- (void) someMethod;
@end
FishA.m
#import "FishA.h"
@implementation FishA
@synthesize x = _x;
@synthesize y = _y;
@synthesize size = _size;
- (id) init {
self = [super init];
if (self) {
// Initilize default values
// Only use the _x and _y in init
// no other place
_x = 0;
_y = 0;
_size = 10;
}
return self;
}
- (void) someMethod {
// Set the values
self.x = 10;
self.y = 10;
// Access the values
NSLog(@"X: %d", self.x)
NSLog(@"Y: %d", self.y)
}
鱼B.h
@interface FishB : NSObject
@property (nonatomic, assign) int x;
@property (nonatomic, assign) int y;
@property (nonatomic, strong) NSColor *color;
- (void) someMethod;
@end
颜色属性看起来有点不同。因为颜色是一个对象而不是基本类型,我们需要告诉编译器我们想要如何处理它。告诉编译器保留这个strong
对象,直到我们完成它。另一个选项是weak
并且告诉编译器不要保留对象。一般来说,与对象,使用强。
鱼B.m
#import "FishB.h"
@implementation FishB
@synthesize x = _x;
@synthesize y = _y;
@synthesize color = _color;
- (id) init {
self = [super init];
if (self) {
// Initilize default values
// Only use the _x and _y in init
// no other place
_x = 0;
_y = 0;
_color = [NSColor blueColor];
}
return self;
}
- (void) someMethod {
// Set the values
self.x = 10;
self.y = 10;
// Access the values
NSLog(@"X: %d", self.x)
NSLog(@"Y: %d", self.y)
}
所以我创建了两个独立的类,FishA 有一个 size 属性,FishB 有一个 color 属性。两条鱼都具有 x 和 y 属性。并不过分令人兴奋,但它使两个课程有所不同。
采用
#import "FishA.h"
#import "FishB.h"
- (void) example {
FishA *fishA = [[FishA alloc] init];
FishB *fishB = [[FishB alloc] init];
fishA.x = 10;
fishB.x = 20;
fishA.size = 50; // Works
fishB.size = 50; // Will not work
fishA.color = [NSColor redColor]; // Will not work
fishB.color = [NSColor redColor]; // Works
}