我在使用位置服务的iPhone应用程序中发生了一次奇怪的崩溃。当我离开应用程序(通过按下主页按钮)并立即返回(通过单击应用程序图标)它会获得EXC_BAD_ACCESS,显然是因为一个对象变成了一个僵尸。
仪器显示违规对象的以下历史记录:
除了最后一个(崩溃)之外的所有调用者都来自框架代码(除了main.m以外没有黑名字),所以我看不出错误的来源。我错过了仪器中的东西吗?我觉得它有很多信息,但也许我看错了。
另外两个可能的提示:
我不认为这发生在iOS 5之前
控制台显示有关“仅添加内存”的虚假消息,我无法识别/理解:
欢迎任何建议!
引用lococation的成员时会发生崩溃,这是一个ACLocation对象:
@property(nonatomic,retain)ACLocation *locn;
emailBody = [NSString stringWithFormat:
NSLocalizedString(@"%@\nLocation: %@, %@, %@",@"Email text header3"),
emailBody,
locn.ACLocality,
locn.ACAdministrativeArea,
locn.ACCountry
];
ACLocation定义为:
@interface ACLocation : NSObject <CLLocationManagerDelegate> {
double ACLatitude;
double ACLongitude;
double ACAltitude;
double ACAltitudeAccuracy;
NSString *ACLocality;
NSString *ACAdministrativeArea;
NSString *ACCountry;
}
@property (nonatomic)double ACLatitude;
@property (nonatomic)double ACLongitude;
@property (nonatomic)double ACAltitude;
@property (nonatomic)double ACAltitudeAccuracy;
@property (nonatomic,retain)NSString *ACLocality;
@property (nonatomic,retain)NSString *ACAdministrativeArea;
@property (nonatomic,retain)NSString *ACCountry;
@end
答案 0 :(得分:1)
您有一个弱属性,您应该拥有强。查看您的属性并将其更改为strong。
如果您正在使用实例变量(它们现在通过xcode自动合成),例如someVariable
,您可以使用self.someVariable
访问它,以便保留它。在不使用self.
的情况下,您绕过了设置器,并且未在变量上设置retain
。