IOS ¿Por qué falla la inicialización con _variable pero no con self.variable para NSNumber?

Tengo la siguiente clase:

---- archivo .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

------- archivo .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

Por que self.requestId = [NSNumber numberWithInt:-1]; trabajo pero _requestId = [NSNumber númeroConInt:-1]; lanzar un error de tiempo de ejecución?

preguntado el 27 de julio de 12 a las 19:07

Intente construir un programa mínimo donde aislar el problema. Luego, vuelva a agregar funcionalidad de manera incremental hasta que encuentre la fuente del error. -

Lanza EXC_BAD_ACCESS -

1 Respuestas

El método de la clase [NSNumber numberWithInt:-1] está devolviendo un valor liberado automáticamente. Cuando utiliza el método de setter sintetizado, el setter retiene el valor. Cuando pasa por alto el colocador, no hay retención... Así que tan pronto como se drena el grupo de liberación automática, tiene un puntero colgando.

Respondido 27 Jul 12, 19:07

... suponiendo que no esté usando ARC :) - Jesse Rusak

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.