2011-05-03 37 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 

而这正是它被称为和释放。

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错误,但是当我删除“[_stakItem发行]”它工作正常,但是这造成泄漏。有什么方法可以纠正这个问题吗?

回答

2

如果没有看到实际崩溃的上下文,很难给出明确的答案,但是您可能在某处放出_stackItem。这可能是由引用它引起的,但是释放数组是唯一拥有它的东西。实际上你发布的代码没有问题(当然,你的字符串属性应该是复制属性,但这不是导致你崩溃的原因)。

发布后是否使用了_stakItem?

你有这样一个顺序:

stak* foo = [_return_staks objectAtIndex: fooIndex]; 

// etc 

[_return_staks release]; 

// etc 

[foo doSomething]; // Likely to have gone away by now. 
相关问题