2011-05-03 5 views
0

대물 렌즈 c에서 mutableArray에 사용자 지정 개체를 추가 할 때 SIGBUS 오류가 발생합니다.사용자 지정 개체를 해제 할 때 Iphone SIGBUS 오류가 발생했습니다.

@interface stak : NSObject { 
    NSString *idval, 
    *username, 
    *userid, 
    *password, 
    *snippet, 
    *curStakId, 
    *pageCount, 
    *memberCount, 
    *imgURL, 
    *tags; 
    UIImage *icon; 
} 

@property (nonatomic,retain) NSString *idval,*username,*userid,*password,*curStakId,*snippet,*pageCount,*memberCount,*imgURL,*tags; 
@property (nonatomic,retain) UIImage *icon; 

-(id)initWithidval:(NSString *)idvalue 
      username:(NSString *)user 
      userid:(NSString *)uid 
      password:(NSString *)pass 
     curStakId:(NSString *)stakid 
      snippet:(NSString *)snip 
     pageCount:(NSString *)page 
     memberCount:(NSString *)members 
       tags:(NSString *)tag_vals 
      imgURL:(NSString *)img 
       icon:(UIImage *)iconImg; 



@end 

와하는 .m

@implementation stak 
@synthesize idval; 
@synthesize username; 
@synthesize userid; 
@synthesize password; 
@synthesize curStakId; 
@synthesize snippet; 
@synthesize pageCount; 
@synthesize memberCount; 
@synthesize imgURL; 
@synthesize icon; 
@synthesize tags; 

-(id)initWithidval:(NSString *)idvalue 
      username:(NSString *)u 
      userid:(NSString *)uid 
      password:(NSString *)p 
     curStakId:(NSString *)stakid 
      snippet:(NSString *)snip 
     pageCount:(NSString *)page 
     memberCount:(NSString *)members 
       tags:(NSString *)tag_vals 
      imgURL:(NSString *)img 
       icon:(UIImage *)iconImg{ 

    if (self = [super init]) { 
     [self setIdval:idvalue]; 
     [self setUsername:u]; 
     [self setUserid:uid]; 
     [self setPassword:p]; 
     [self setCurStakId:stakid]; 
     [self setSnippet:snip]; 
     [self setPageCount:page]; 
     [self setMemberCount:members]; 
     [self setTags:tag_vals]; 
     [self setImgURL:img]; 
     [self setIcon:iconImg]; 
    } 
    return self; 
} 

-(void)dealloc{ 

    [idval release]; 
    [username release]; 
    [userid release]; 
    [snippet release]; 
    [imgURL release]; 
    [icon release]; 
    [tags release]; 
    [curStakId release]; 
    [memberCount release]; 
    [password release]; 
    [super dealloc]; 
} 

@end 

과 호출 및 해제 곳이다. 내가 "[_stakItem 자료]"잘 작동을 제거 할 때

NSMutableArray *_return_staks = [[NSMutableArray alloc]init];  

stak *_stakItem = [[stak alloc]initWithidval:[NSString stringWithFormat:@"%@",[staks objectAtIndex:i]] 
               username:[NSString stringWithFormat:@"%@",[creators objectAtIndex:i]] 
                userid:[NSString stringWithFormat:@"%@",[creatorid objectAtIndex:i]] 
               password:[NSString stringWithFormat:@"%@",[privacy objectAtIndex:i]] 
               curStakId:[NSString stringWithFormat:@"%@",[idvals objectAtIndex:i]] 
               snippet:tempString 
               pageCount:tempPcount 
              memberCount:tempMcount 
                tags:[NSString stringWithFormat:@"%@",[tags objectAtIndex:i]] 
                imgURL:[NSString stringWithFormat:@"%@",[img objectAtIndex:i]] 
                icon:nil]; 

      [_return_staks addObject:_stakItem]; 

      [_stakItem release]; 

내가이 SIGBUS 오류가 저장된 항목을 참조로 이동

은, 그러나, 그러나 이것은 누출을 만듭니다. 이 문제를 해결할 방법이 있습니까?

답변

2

실제 충돌의 컨텍스트를 보지 않고도 확실한 답을 얻는 것은 어렵지만 어쩌면 _stackItem을 어딘가에서 해제하는 것입니다. 이것은 아마 그것에 대한 참조를 유지하지만 그 배열을 소유 한 유일한 배열을 릴리스함으로써 발생합니다. 실제로 게시 한 코드에는 아무런 문제가 없습니다. (글쎄, 문자열 속성은 실제로 복사 속성이되어야하지만, 이는 충돌을 일으키는 것이 아닙니다.)

출시 후 _stakItem을 사용하고 있습니까?

stak* foo = [_return_staks objectAtIndex: fooIndex]; 

// etc 

[_return_staks release]; 

// etc 

[foo doSomething]; // Likely to have gone away by now. 
:

는 같은 순서가 있습니까
관련 문제