当我将对象分配给实例变量时,存在某种保留问题。我的理解是所有的本地实例变量都是strong
,所以仅仅赋值就足以确保对象不会被销毁,只要它被实例变量引用,但事实并非如此。当分配给它的实例变量时,对象似乎不会被保留
在下面的代码中,我将实例MKRoute
变量myRoute
指定为计算方向调用的路由。此时myRoute
存在并且有效,包含步骤和折线等。但后来在我的代码中,我试图访问myRoute
,并且我得到了一个不良访问。
它似乎仍然有一个内存指针值,但对象的其余部分至少在调试器中消失了。没有折线或步骤等,或者至少不是它应该是。我的代码中没有其他任务或修改或myRoute
。我需要做些什么来确保这个对象不被破坏?
@implementation SomeClass
MKRoute *myRoute = nil;
.
.
.
-(void) showRoute:(MKMapItem *)origin destination:(MKMapItem*)destination
{
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.source = origin;
request.destination = destination;
request.requestsAlternateRoutes = NO;
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (error) {
NSLog(@"ERROR %@",error);
// Handle Error
} else {
[self drawRoute:response];
}
}];
}
-(void)drawRoute:(MKDirectionsResponse *)response
{
for (MKRoute *route in response.routes)
{
myRoute = route; // set the global route
[mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads];
}
}
.
.
.
@end
我很高兴地承认它是一个全局变量VS实例变量,但我还是不明白为什么它失去了保留,如果我尝试静态或__strong上它仍然缠在赋值的变量声明拖曳路线,后来走了。
仅供参考 - 如果myRoute被声明在不中途的地方,那么'myRoute'不是一个实例变量。 – rmaddy
您的编辑确认'myRoute'不是伊娃。这是一个文件全局变量。 – rmaddy