IOS Why does Initialisation fail with _variable but not with self.variable for NSNumber?
===

I have the following Class:

---- .h file

    #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 file

    #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


Why does 
**self.requestId = [NSNumber numberWithInt:-1];** 
work but 
**_requestId = [NSNumber numberWithInt:-1];** 
throw a runtime error?