iOS -@interface/@implementation

@interface...@end :可以理解為相當(dāng)于c++中類的變量和方法的聲明

@implementation...@end :可以理解為相當(dāng)于c++中類的方法的實(shí)現(xiàn)

oc.h中

@interface Person : NSObject

@property (nonatomic,copy)NSString *name;

@property (nonatomic,assign)NSInteger age;

- (void)fun;

@end

oc.m中

@implementation Person

- (void)fun {

? ? NSLog(@"(void)fun ");

}

@end

在一些代碼中 會(huì)遇到一些關(guān)于@interface別的寫法 例如下面這樣的

.h中

@interface Person : NSObject{

? ? NSString*_name;

}

@property (nonatomic,copy)NSString *name;

- (void)fun;

@end

.m中

@interface Person ()

@property (nonatomic,assign)NSInteger age;

@end

@implementation Person

- (void)fun {

? ? NSLog(@"(void)fun ");

}

@end

主要想扒一下兩個(gè)問(wèn)題:

1.為什么.h文件和.m文件里各有1個(gè)@interface?它們分別有什么用??

2.為什么name要定義兩遍

.h文件和.m文件里@interface...@end它們分別有什么用??

.h文件中的@interface 就是典型的頭文件,是供其他的class調(diào)用的,為外界暴露property和functions;

.m中的@interface ...@end在oc里是這樣的:

就是我們常說(shuō)的類的擴(kuò)展,是.h文件中interface的補(bǔ)充,但是其變量不暴露出去,只能在.m可見(jiàn),并且方法不必聲明,可以直接在@implementation...@end實(shí)現(xiàn)。比如對(duì)于上面的代碼,當(dāng)別的class引用當(dāng)前類的時(shí)候,我并不想讓別人知道我的age;

為什么name要定義兩遍

其實(shí)現(xiàn)在用的更多的是第一種寫法,幾乎已經(jīng)沒(méi)有人寫兩遍了,但是原理還是要理解一下:

嚴(yán)格來(lái)說(shuō)@interface{}里定義的變量,叫作instance variable,它是這個(gè)Class內(nèi)部真正的全局變量,也就是我們常說(shuō)的實(shí)例變量,但是這個(gè)變量并不對(duì)外公開(kāi),所以需要一個(gè)對(duì)外公開(kāi)的方法來(lái)調(diào)用,即@property,作用就是告訴外界,我這個(gè)Class里,有這個(gè)變量的set/get方法,讓你調(diào)用來(lái)操作該變量。

升級(jí)之后,我們只需要聲明@property,系統(tǒng)回自動(dòng)生成實(shí)例變量。

說(shuō)到@property。還要說(shuō)另外一個(gè)@synthesize,有些人會(huì)在聲明@property之后習(xí)慣性的在.m@synthesize一下,它是做什么呢,上面說(shuō)到,當(dāng)我們用@property的時(shí)候,相當(dāng)于聲明set/get方法,那我們就需要在.m實(shí)現(xiàn)該方法,但是一個(gè)類里面常常不會(huì)說(shuō)只有一個(gè)變量,也就不止一個(gè)set/get方法,手動(dòng)實(shí)現(xiàn)太浪費(fèi)時(shí)間,所以@synthesize在.m文件里自動(dòng)生成了get/set方法。

當(dāng)然,人越來(lái)越懶,Xcode4.4開(kāi)始之后,編譯器會(huì)自己為每一個(gè)@property自動(dòng)添加@synthesize,所以我們只需要寫@property就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容