为什么ObjC程序卡住了? 我是ObjC的新手并试图通过命令在Linux系统上编译它:
gcc $(gnustep-config --objc-flags)* .m $(gnustep-config --base-libs)
这里是代码:
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Rect * r = [[Rect alloc]initWithWidth:30 height:50];
NSLog(@"%f", [r height]);
[pool drain];
return 0;
}
//=====
#import <Foundation/Foundation.h>
@interface Rect : NSObject <NSCopying> {
}
@property double width;
@property double height;
- (Rect *) initWithWidth:(double)w
height:(double)h;
- (double) height;
//...
//=====
@implementation Rect
- (Rect *) initWithWidth:(double)w
height:(double)h
{
self.width = w;
self.height = h;
return [super init];
}
- (double) height
{
return self.height;
}
// ...
答案 0 :(得分:1)
当您致电return self.height;
将该行更改为return _height;
时,您正在创建一个无限递归循环,它应该可以正常工作。您还可以从标头文件中删除- (double) height;
,因为您的属性声明会自动生成一个setter - (void)setHeight:(double)height;
和一个getter - (double)height;
。您也应该从实现中删除getter,因为它已经使用属性声明生成了。