1

サンプルクラスとServerConnectionクラスの2つのクラスがあります。

sample.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のメソッドが2つしかありません。

@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;

ServerConnection.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リリース]:割り当て解除されたインスタンス0xf9978d0 *および **mallocに送信されたメッセージ:オブジェクト0x11039420のエラー:解放されるポインターが割り当てられませんでした デバッグするためにmalloc_error_breakにブレークポイントを設定します**

私は古い投稿を参照して解決しようとしましたが、それでも同じ問題に直面しています。誰かが私が間違いをしているところを教えてください?

4

1 に答える 1

1

urlここであなたのivarに問題はありません。これはあなたのコード全体ですか?ServerConnectionライフサイクルは?月曜の朝が疑わしいものを何も見ない理由かもしれません...追加のコメントはほとんどありません...

action_code = 0;次の行に割り当てNSNumberているため、行は役に立ちません。Andaction_codeNSNumberですので、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] ) ) {か、2 つのライナーを使用する必要があります。

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

他の人がコードを読みやすいように、スタイルを改善する必要があります。

于 2013-01-28T09:07:49.480 に答える