2012-07-27 8 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

相關問題