我是Objective-C的新手,我一直在使用简单的程序,我想知道如何合成一个Objective-C对象指针。所以,如果我有一个像这样的简单头文件:
//
// Rectangle.h
// Program 8
#import <Foundation/Foundation.h>
#import "XYPoint.h"
@interface Rectangle : NSObject
{
XYPoint *origin;
}
- (XYPoint *) origin; // getter
- (void) setOrigin: (XYPoint *)pt; // setter
@end
如何将对象指针*origin
与@property
和@synthesize
合成?
答案 0 :(得分:3)
在.h界面中这样:
@property (nonatomic, retain) XYPoint* origin;
Nonatomic是可选的,可以删除,这将使属性线程安全。保留意味着引用计数将递增,复制是对此的替代,其复制和递增引用计数,Assign是一种替代方案,对于与对象一起使用并不是非常安全,而且更适用于基本类型。
在.m实现中:
@synthesize origin;
或
@synthesize origin = _origin;
如果你想知道_origin在做什么,在this question here.
的答案中有一个很好的解释不要忘记在dealloc(或者viewDidUnload)中释放你的属性 - 显然不是你在这里写的类,但是如果使用视图控制器的话。)
答案 1 :(得分:1)
属性用于避免样板代码获取和设置变量。在上面的例子中,你不会在标题中声明getter和setter,而是为origin声明一个属性并在你的实现文件中合成它。
在界面(.h)中使用其中一个,而不是全部:
@property (retain) XYPoint* origin; // will increment the retain count (strong)
@property (copy) XYPoint* origin; // will make your own copy with retain count 1 (strong)
@property (assign) XYPoint* origin; // will not increase the retain count (not strong)
在实施(.m)中:
@synthesize origin;
根据您将如何使用“原产地”,您可以保留,复制或仅指定它(见上文)。
根据您定位的操作系统和版本,您可能不需要声明实际变量或合成它(如果我不记得错误),属性本身就足够了。