2012-07-27 9 views
0

我有以下类别:IOS为什么初始化失败时使用_variable,但不使用self.variable替换NSNumber?

---- .h文件中

#import <Foundation/Foundation.h> 
#import "MapperProtocoll.h" 

@interface ServiceRequest : NSObject { 
} 

@property (strong, nonatomic) NSString *url; 
@property (strong, nonatomic) NSString *postData; 
@property (strong, nonatomic) NSNumber *requestId; 
@property (strong, nonatomic) id<ServiceMapperDelegate> mapper; 

-(id)initWithUrl:(NSString *)url andWithPostdata:(NSString *)postData; 

@end 

------- .m文件

#import "ServiceRequest.h" 

@implementation ServiceRequest 

@synthesize url = _url, postData = _postData, requestId = _requestId, mapper = _mapper; 

-(id)initWithUrl:(NSString *)url andWithPostdata:(NSString *)postData { 
    if (self = [super init]) { 
     _url = url; 
     _postData = postData; 
     self.requestId = [NSNumber numberWithInt:-1]; // HERE IS THE PROBLEM 
    } 
    return self; 
} 

@end 

为什么 self.requestId = [NSNumber numberWithInt:-1]; 工作,但 _requestId = [NSNumber numberWithInt:-1]; 抛出运行时错误?

+1

它抛出了什么错误? – 2012-07-27 18:34:38

+0

尝试构建一个最小程序来隔离问题。然后,逐步添加功能,直到找到错误的来源。 – Etan 2012-07-27 18:37:30

+0

它抛出EXC_BAD_ACCESS – CPlusPlus 2012-07-27 19:05:34

回答

3

类方法[NSNumber numberWithInt:-1]正在返回一个自动释放值。当您使用合成的setter方法时,值将被setter保留。当你绕开setter,没有保留...所以一旦autorelease池耗尽,你有一个悬挂指针。

+0

......假设他没有使用ARC :) – 2012-07-27 18:42:06

相关问题