【问题标题】:Do properties need to be deallocated?是否需要解除分配属性?
【发布时间】:2010-05-11 17:42:29
【问题描述】:

我继承了 NSObject:

#import <Foundation/Foundation.h>


@interface STObject : NSObject {
    NSString *message_type;
    NSString *twitter_in_reply_to_screen_name;
}

@property(nonatomic, copy) NSString *message_type;
@property(nonatomic, copy) NSString *twitter_in_reply_to_screen_name;

@end

我的实现如下:

#import "STObject.h"

@implementation STObject
@synthesize message_type, twitter_in_reply_to_screen_name;

@end

是否需要为释放字符串的两个属性创建一个 dealloc 方法?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch xcode


    【解决方案1】:

    是的。属性不会自动-release'd 和@synthesize

    -(void)dealloc {
       [message_type release];
       [twitter_in_reply_to_screen_name release];
       [super dealloc];
    }
    

    【讨论】:

    • 或者,等效地,self.message_type = nil; self.twitter_in_reply_to_screen_name = nil;
    • 我更喜欢释放实例变量,因为如果你在 ivar 被释放后引用它,你的程序会爆炸;因此,设置为nil 将防止您的程序爆炸,但它也会隐藏错误。
    • Jonathan Sterling:只有在发送[super dealloc] 之后 这样做才会有问题,无论你采用哪种方式,这都是一个问题。正确的解决方案是自己发送 release 消息(不要使用属性,以防访问器(可能已被覆盖)不是纯 developer.apple.com/mac/library/documentation/DeveloperTools/… )并最后发送 [super dealloc]
    猜你喜欢
    • 2013-03-23
    • 2015-09-20
    • 2011-08-20
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多