super和self之间的区别,还有super可以使用点语法么

iOS 码拜 9年前 (2015-10-01) 1065次浏览

34、现有Person类声明和Person的子类Student,代码如下:
@interface Person : NSObject
-(void) walk;
@end
@implementation Person
-(void) walk
{
  NSLog(@”Person is walking…”);
}
@end
@interface Student : Person
-(void) studentWalk;
@end
@implementation Student
-(void) studentWalk
{
  (1)
}
end
在下列选项中,那些代码可以填在(1)处实现调用Person类中的walk方法,并输出“Person is walking…”:
答案:(B )
  A、walk();
 B、super.walk;
 C、[self walk];
 D、self.walk();
不是说符合setter getter的方法可以用点语法么,这里的walk没有返回值,,,应该类似于setter方法把。但是名字前面没有set
这个情况怎么解释呢

另外还有个问题,谁能解释一下self = [super init];  这句话该怎么理解呢

解决方案:60分
选C,只有拥有类似于setXXX和XXX的方法才能用点语法
XXX代表成员变量,一般我们在Object-C中写getter方法时不写getXXX而写XXX
解决方案:10分
其实你提供的答案已经很明显了:
A、walk();
B、super.walk;
C、[self walk];
D、self.walk();
A 和 D 根本不是调用 OC 方法的语法。 B 和 C 是可以的,walk 虽然没有返回值,但是点语法其实就是调用了[xxx walk],所以 B 是可以的。

关于 self = [super init]; 这句代码,对 self 的赋值只能在它自己的 init 方法里进行,即使是 super,也不能改变 self 的指针。而且 super 是有可能初始化失败的,比如用一个不存在的文件路径初始化一个 NSURL 对象,所以我们也会在下面用一个 if 判断一下 self。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明super和self之间的区别,还有super可以使用点语法么
喜欢 (0)
[1034331897@qq.com]
分享 (0)