Objective c exc_错误访问错误//
我使用的是Xcode 4和ARC,当我试图在书中做这个练习时,我遇到了这个错误。Objective c exc_错误访问错误//,objective-c,Objective C,我使用的是Xcode 4和ARC,当我试图在书中做这个练习时,我遇到了这个错误。线程1:程序接收到信号:“EXC_BAD_ACCESS”。与Rectangle*intersectingRect=[[Rectangle alloc]init]在同一行 #import <Foundation/Foundation.h> @interface XYPoint : NSObject @property float x, y; @end [self-intersect:myRect
线程1:程序接收到信号:“EXC_BAD_ACCESS”。
与Rectangle*intersectingRect=[[Rectangle alloc]init]在同一行在矩形.m
中的intersect
方法中的code>
#import <Foundation/Foundation.h>
@interface XYPoint : NSObject
@property float x, y;
@end
[self-intersect:myRect]
调用不会导致无限递归吗?(调用函数本身时使用的参数与调用函数时使用的参数相同)。首先,您需要了解抛出EXC_BAD_访问的原因。通常是因为您试图访问已发布的内容。你可以认为intersectingRect可能是给你带来问题的那个,但很可能是myRect已经发布了。你是如何保留myRect的?哦,天哪,我用错了方法。我应该调用containsPoint方法。解决了这个错误。非常感谢。
#import "XYPoint.h"
@implementation XYPoint
@synthesize x, y;
@end
#import "XYPoint.h"
@interface Rectangle : NSObject
@property float width, height;
-(void) setOrigin: (XYPoint *) pt;
-(XYPoint *) origin;
-(BOOL) containsPoint: (XYPoint *) aPoint;
-(Rectangle *) intersect: (Rectangle *) myRect;
@end
#import "Rectangle.h"
@implementation Rectangle {
XYPoint *origin;
}
@synthesize width, height;
-(void) setOrigin: (XYPoint *) pt {
if (! origin)
origin = [[XYPoint alloc] init];
origin.x = pt.x;
origin.y = pt.y;
}
-(XYPoint *) origin {
XYPoint *myOrigin = [[XYPoint alloc] init];
myOrigin.x = origin.x;
myOrigin.y = origin.y;
return myOrigin;
}
-(BOOL) containsPoint:(XYPoint *)aPoint {
if (origin.x + height >= aPoint.x && origin.y + width >= aPoint.y)
return YES;
else
return NO;
}
-(Rectangle *) intersect:(Rectangle *)myRect {
Rectangle *intersectingRect = [[Rectangle alloc] init];
if ([self intersect: myRect]){
intersectingRect.width = self.origin.x + self.width - myRect.origin.x;
intersectingRect.height = myRect.origin.y + myRect.height - self.origin.y;
intersectingRect.origin.x = myRect.origin.x;
intersectingRect.origin.y = self.origin.y;
}
return intersectingRect;
}