[問題] self用法

看板MacDev作者 (牛牛)時間9年前 (2015/11/03 21:36), 9年前編輯推噓3(3012)
留言15則, 6人參與, 最新討論串1/1
code @implementation Dog - (NSString*) bark { return @"Woof!"; } - (NSString*) speak { return [self bark]; } @end @implementation Basenji : Dog - (NSString*) bark { return @""; } @end Basenji* b = [Basenji new]; NSString* s = [b speak]; 1.這樣是呼叫Basenji class的bark method ,還是呼叫Dog class的bark method 2.為什麼我編譯後是出現Program ended with exit code: 0 而不是字串? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.68.185 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1446557811.A.60C.html

11/03 21:49, , 1F
理論上是Basenji的bark,不過為什麼會出現錯誤就不明瞭了
11/03 21:49, 1F

11/03 21:49, , 2F
建議描述一下你是怎麼運行它的
11/03 21:49, 2F

11/03 21:53, , 3F
為什麼是Basenji的bark??
11/03 21:53, 3F
Dog.h #import <Foundation/Foundation.h> @interface Dog : NSObject - (NSString*) bark ; - (NSString*) speak ; @end Dog.m #import "Dog.h" @implementation Dog - (NSString*) bark { return @"Woof!"; } - (NSString*) speak { return [self bark]; } @end Basenji.h #import "Dog.h" @interface Basenji : Dog - (NSString*) bark; @end Basenji.m #import "Basenji.h" @implementation Basenji - (NSString*) bark { return @"123"; // empty string, Basenjis can't bark }; @end main.m #import <Foundation/Foundation.h> #import "Dog.h" #import "Basenji.h" int main(int argc, const char * argv[]) { @autoreleasepool { Basenji* b = [Basenji new]; NSString* s = [b speak]; NSLog(@" %@ .",s);//修改後 } return 0; } ※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:00:44

11/03 22:02, , 4F
self指的是這個instance,另外你override bark了,那bar
11/03 22:02, 4F

11/03 22:02, , 5F
k的method指標會指向Basenji class
11/03 22:02, 5F

11/03 22:05, , 6F
[b speak]->[b bark](不管有沒有override)
11/03 22:05, 6F

11/03 22:06, , 7F
沒有就會得到Woof,有就會得到123
11/03 22:06, 7F

11/03 22:08, , 8F
另外,你得不到東西是正常的,因為這個程式在運行完畢時會
11/03 22:08, 8F

11/03 22:09, , 9F
馬上終止,所以看不到任何東西
11/03 22:09, 9F

11/03 22:10, , 10F
想要印出資訊的話請用NSLog
11/03 22:10, 10F
[b speak]->[b bark] 這句話看不懂 沒有就會得到Woof,有就會得到123 這句話的意思是 如果我在Basenji class 沒有bark method得到Woof 如果我在Basenji class 有寫bark method得到123 理解對嗎? ※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:29:51

11/03 22:31, , 11F
但是你沒有把它印出來啊....
11/03 22:31, 11F
※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:41:38

11/04 11:29, , 12F
設斷點用lldb印 你這邊猜要猜到民國幾年
11/04 11:29, 12F

11/04 14:12, , 13F
啊不就繼承 先去看看物件導向的繼承在說啥啊
11/04 14:12, 13F

11/09 00:18, , 14F
就override method了啊
11/09 00:18, 14F

11/11 22:12, , 15F
懂了 謝謝大家
11/11 22:12, 15F
文章代碼(AID): #1MEBXpOC (MacDev)
文章代碼(AID): #1MEBXpOC (MacDev)