繁体   English   中英

如何在Objective-C中合成对象指针?

[英]How are object pointers in objective-c synthesized?

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

在.h界面中如下所示:

@property (nonatomic, retain) XYPoint* origin;

非原子性是可选的,可以删除,这将使属性成为线程安全的。 保留表示将增加引用计数,复制是复制并递增引用计数的替代方法,复制是对对象使用不是很安全且更适合原始类型的替代方法。

在.m实现中:

@synthesize origin;

要么

@synthesize origin = _origin;

如果您想知道_origin在做什么,在此问题的答案中对此有很好的解释

不要忘记在dealloc(或viewDidUnload-显然不是在此处编写的类中,但是如果使用视图控制器)中释放属性。

使用属性可以避免样板代码获取和设置变量。 在上述情况下,您不会在标头中声明getters和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;

根据您将如何使用“来源”,您可以保留,复制或仅分配它(请参见上文)。

根据您所针对的操作系统和版本,您可能不需要声明实际变量或对其进行综合(如果我记错了),则属性本身就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM