2

我的项目中有这个类:

        @interface VideoItem : NSObject <NSCoding> {
              NSString *name;
              NSString *artist;
              int seconds;
        }

        @property (nonatomic, retain) NSString *name;
        @property (nonatomic, retain) NSString *imgUrl;
        @property (nonatomic, retain) NSString *artist;

        @end

这就是我创建这个对象的方式:

    VideoItem *item = [[VideoItem alloc] init];
    item.name = name;
    item.imgUrl = imgLink;
    item.artist = artist;

这是dealloc:

- (void)dealloc{
    [name release];
    [imgUrl release];
    [artist release];

    [super dealloc];
}

我想知道这dealoc是否可以NON-ARC?我是否需要做其他事情,因为这NSString是与财产有关的?

编辑

如果 VideoItem 对象是通过以下方式创建的:

VideoItem *item = [[VideoItem alloc] init];
        item.name = [NSString alloc]initWithFormat@"%@",name];
        item.imgUrl = [NSString alloc]initWithFormat@"%@",imgLink];
        item.artist = [NSString alloc]initWithFormat@"%@",artist];

在这种情况下,dealloc 还可以吗?或者我需要改变什么?

4

2 回答 2

2

一切看起来都不错,您正在释放所有@properties对象。我可能也会将它们指向 nil,以确保如果调用其中一个属性,它将被 nilled 并且没有垃圾值,如下所示:

- (void)dealloc{
    [name release], name = nil;
    [imgUrl release], imgUrl = nil;
    [artist release], artist = nil;

    [super dealloc];
}

另一件事,没有关系,如果您创建自己的 init 会更干净,这样您就可以在实际创建对象时传递属性值,如下所示:

-initWithName:(NSString *)name withImgURL:(NSString *)imgURL withArtist:(NSString *)artist;

您的编辑:

item.name = [NSString alloc]initWithFormat@"%@",name];
item.imgUrl = [NSString alloc]initWithFormat@"%@",imgLink];
item.artist = [NSString alloc]initWithFormat@"%@",artist];

仅基于此,它会造成泄漏,因此您应该小心。要解决这个问题:

item.name = [[NSString alloc]initWithFormat@"%@",name] autorelease];
item.imgUrl = [[NSString alloc]initWithFormat@"%@",imgLink] autorelease];
item.artist = [[NSString alloc]initWithFormat@"%@",artist] autorelease];
于 2013-05-13T08:30:22.983 回答
0

如果您没有启用 ARC,那么您的析构函数是正确的。您正在释放所有保留的属性并调用 super,这就是您所需要的。

于 2013-05-13T08:30:04.333 回答