@property在xcode 4.5之前只是單純的告訴編譯器,“我在后面實(shí)現(xiàn)了對那個(gè)變量的setter和getter方法,你放心吧”,但是如果你不寫synthesize配合的話就會(huì)出錯(cuò)。synthesize才是代替setter和getter的關(guān)鍵部分。 @synthesize在xcode4.5之前是配合@property使用,幫助你隱式了實(shí)現(xiàn)了一個(gè)setter和getter。如果你沒有在interface里聲明變量,它會(huì)幫你隱式的創(chuàng)建一個(gè)已下劃線開頭的同名變量,比如@synthesize myName = _myName; 在xcode4.5以后,由于改進(jìn)了llvm編譯器。@synthesize的工作全部由@property完成了,也就是說只需要聲明@property就可以完全的創(chuàng)建一個(gè)變量。 至于interface里聲明的變量和property聲明的變量區(qū)別。我認(rèn)為有兩點(diǎn): 1.放在.h文件里的property是一個(gè)public屬性,可以供外部類訪問。 2.property和ivars聲明,本來就是兩個(gè)東西,一個(gè)是通過setter和getter去訪問對象,而另一個(gè)是直接訪問。property可以通過setter實(shí)現(xiàn)數(shù)據(jù)綁定,而ivars是不行的. 所以,老外的一些建議是: 1.如果只是單純的private變量,最好聲明在implementation里. 2.如果是類的public屬性,就用property寫在.h文件里 3.如果自己內(nèi)部需要setter和getter來實(shí)現(xiàn)一些東西,就在.m文件的類目里用property來聲明 |
|