为什么编译器警告我“控制到达非空函数的结束”?

时间:2011-08-10 11:38:51

标签: objective-c

我在animal.h文件中声明了一个方法

-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u;

我在animal.m文件中实现了这个方法,如

-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u
{
    self.name=n;
    self.description=d;
    self.imageURL=u;

}

但在文件末尾显示警告,例如“控制到达无效功能的结束”

谁能告诉我这是什么问题?

3 个答案:

答案 0 :(得分:9)

您的方法的返回类型为id。但是你什么都没回来。这是编译器说的错误。

顺便说一句:这种init方法有很多缺陷。你应该把它改成:

-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u
{
    if ((self = [super init])) {
        self.name=n;
        self.description=d;
        self.imageURL=u;
    }
    return self;
}

答案 1 :(得分:1)

init方法应返回对象引用.. 所以,

-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u
{

  self.name=n;

  self.description=d;

  self.imageURL=u;

  return self;

}

答案 2 :(得分:0)

假设动物类是NSObject的子类,并且该方法是初始化器,这里的方法应该是什么样的

-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u
{
    if(self = [super init]){
        self.name=n;
        self.description=d;
        self.imageURL=u;
    }
    return self;
}