0

我有以下课程:

---- .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]; 抛出运行时错误?

4

1 回答 1

3

类方法[NSNumber numberWithInt:-1]返回一个自动释放的值。当您使用合成的 setter 方法时,该值由 setter 保留。当您绕过设置器时,没有保留...因此,一旦自动释放池耗尽,您就会有一个悬空指针。

于 2012-07-27T18:37:58.513 回答