次のコードがあります。このプロパティのiVarは、クラスdealloc
のメソッドで保持され解放されています。 iVarは2つのメソッドで使用され、値を連続的に変更しますが、値が壊れている場合は を使用することがあります。何故ですか?@propertyのメモリの破損
.H
@interface ChatController : NSObject <ASIHTTPRequestDelegate>{
NSTimer *timer;
NSString *_idLastMessageFromServer;
}
@property(nonatomic, retain)NSString *idLastMessageFromServer;
@end
.M
@implementation ChatController
@synthesize idLastMessageFromServer = _idLastMessageFromServer;
- (void)initLoopTimer{
timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(update:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
- (void)update:(id)sender{
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:CONSTANT_YYYY];
[request setDelegate:self];
[request addPostValue:_idLastMessageFromServer forKey:CONSTANT_XXX];
[request setDidFinishSelector:@selector(requestUpdateFinish:)];
[request startAsynchronous];
}
- (void)requestUpdateFinish:(ASIHTTPRequest *)request{
NSString *response = [request responseString];
if(response && response.length){
if(![response isEqualToString:CHAT_RESPONSE_NO_MESSAGES]){
NSArray *array = [response componentsSeparatedByString:CHAT_PARSE_RESPONSE];
if(array && [array count] == 2){
**_idLastMessageFromServer = [array objectAtIndex:0];**
}
}
}
}
しかし、ループ方法更新呼び出すとき:を、それがEXC_BAD_ACCESSとコード
[request addPostValue:_idLastMessageFromServer forKey:CONSTANT_XXX];
のこの行にクラッシュメッセージ、なぜですか?
メモリ破損を検索するときに役立つように、タイトルのスペルを修正する必要があります。 – Cthutu
ありがとう@ジャッキーボーイ – NTTake