1

我有两个类,一个是 Sample 类和 ServerConnection 类。

样本.m

.
.
    ServerConnection *serverConnection = [[ServerConnection alloc]init:val1 _handler:serverConnectionHandler _connectionURL:url];
//    [NSThread detachNewThreadSelector:@selector(run) toTarget:serverConnection withObject:NULL];    
    [serverConnection performSelectorInBackground:@selector(run) withObject:NULL];

在 serverConnection 我只有两种方法 ServerConnection.h

@interface ServerConnection : NSObject
{
//    NSString* url;
//    Handler* handler;
//    int action_code;
}

@property (nonatomic,retain) NSString* url;
@property (nonatomic,retain) Handler* handler;
@property (nonatomic,retain) NSNumber* action_code;

-(id) init:(int)_action_code _handler:(Handler *)_handler _connectionURL:(NSString *)_connectionURL;
-(void)run;

服务器连接.m

- (id) init:(int)_action_code _handler:(Handler *)_handler _connectionURL:(NSString *)_connectionURL{
    if (self = [super init]) {
        action_code = 0;
        action_code = [[NSNumber alloc]initWithInt:_action_code];
        handler = [[Handler alloc]init:_handler];
        url = [[NSString alloc]initWithString:_connectionURL];
    }
    return self;
}

-(void)run
{
     NSLog(@"url--> %@",url);

   //Here using NSURLConnection to fetch data from server
}

当运行方法启动时,我有时会收到此错误过度不良访问,并且在启用僵尸后显示此错误消息 -[CFString release]:消息发送到已释放实例 0xf9978d0 * 和 **malloc:对象 0x11039420 的错误:未分配被释放的指针 在 malloc_error_break 中设置断点进行调试**

我参考了旧帖子并试图解决但仍然面临同样的问题。任何人请指出我在哪里做错了?

4

1 回答 1

1

我看不出你的urlivar 有什么问题。这是你的全部代码吗?生命周期是什么ServerConnection?星期一早上可能是我没有看到任何可疑之处的原因......几乎没有其他评论......

action_code = 0;行是没用的,因为你NSNumber在下一行分配。action_code是,所以NSNumber,即使你想给它赋值 0,你也应该写action_code = @( 0 )

样式 ...action_code也应命名为actionCode. 该init...方法应如下所示:

- (id)initWithActionCode:(int)actionCode handler:(Handler *)handler connectionURL:(NSString *) connectionURL {

并且if (self = [super init]) {应该看起来像if ( ( self = [super init] ) ) {或使用两个班轮:

self = [super init];
if ( self ) {

你应该改进你的风格,让你的代码更容易被其他人阅读。

于 2013-01-28T09:07:49.480 回答