Objective-c中的对象指针是如何合成的?

时间:2011-11-10 21:32:09

标签: objective-c object pointers

我是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合成?

2 个答案:

答案 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;

根据您将如何使用“原产地”,您可以保留,复制或仅指定它(见上文)。

根据您定位的操作系统和版本,您可能不需要声明实际变量或合成它(如果我不记得错误),属性本身就足够了。