创建一个对象 - Objective-C

3

问题

我正在尝试在Objective-C中创建一个对象。我知道如何做,但我对实现文件中的方法有一些疑问。

这个对象:

@interface Program : NSObject {
    NSString *sid;
    NSString *le;
    NSString *sd;
    NSString *pid;
    NSString *n;
    NSString *d;
    NSString *url;
}

@property (nonatomic, retain) NSString *sid;
@property (nonatomic, retain) NSString *le;
@property (nonatomic, retain) NSString *sd;
@property (nonatomic, retain) NSString *pid;
@property (nonatomic, retain) NSString *n;
@property (nonatomic, retain) NSString *d;
@property (nonatomic, retain) NSString *url;

@end

问题

我只需要实现deallocinit,是这样吗?

此外,我没有特殊的初始化需求,那么我应该保留默认的init方法如下吗?

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

5
你确定要“保留”NSString吗?如果被保留的对象实际上是NSMutableString,它可能会在你使用时发生变化。我很少使用“保留”NSString属性,我通常会选择“复制”它们。 - Richard
同意。我读过的所有资料都建议在处理NSString时使用copy。 - John T
没错.. 我总是忘记这个!非常感谢! - darksky
6个回答

5

您需要合成属性,如果不需要任何自定义初始化,则可以保留init方法不变。实际上,在这里没有必要实现init。但是在dealloc中,您需要释放字符串。

@implementation Program

@synthesize sid;
// ... synthesize others

- (void)dealloc {
    [sid release];
    // ... release others

    [super dealloc];
}

@end

3

我可能是错的,但肯定会有人纠正我;),但如果你没有进行任何特殊初始化操作,则不需要init方法。


1

如果你正在创建一个属性(你应该合成,这样编译器就会自动生成getter和setter方法),如果你正在进行自定义初始化,那么你需要记住self关键字。

-(id)init{
  self.sid = @"SID" //Without the self object & the dot we are no longer sending 
                     //an object a message but directly accessing ivar named sid
 }

 - (void)dealloc {
     self.sid = nil;
     [super dealloc];
   }

1
我只需要实现dealloc和init方法,是这样吗?
你还需要实现所有这些属性,但你可以通过使用@synthesize让编译器来完成所有的艰苦工作。
每个属性都需要在你的-dealloc中释放。

0

如果你没有需要拆卸或设置的内容,那么你只需要实现- dealloc- init。如果没有这些需求,你就不必实现它们,因为从NSObject继承的默认值已经可以胜任。


0
你需要实现dealloc方法,并释放所有的实例变量。此外,不要忘记使用@synthesize来合成你的属性!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接