在this tutorial,筆者有以下聲明:在代碼中的一些點iPhone - 性能,高德等
上.H
UIViewController *presentingViewController;
...
@property (retain) UIViewController *presentingViewController;
上的.m
@synthesize presentingViewController;
,在區塊內,他確實:
self.presentingViewController = viewController;
然後
[presentingViewController dismissModalViewControllerAnimated:NO];
我覺得這很奇怪。如果是將viewController分配給self.presentingViewController,不應該調用
[self.presentingViewController dismissModalViewControllerAnimated:NO];
?
我已經改變了他的代碼,以
.H
@property (retain) UIViewController *presentingViewController;
.M
@synthesize presentingViewController = _presentingViewController;
和我做的是:
self.presentingViewController = viewController;
然後
[self.presentingViewController dismissModalViewControllerAnimated:NO];
問題是,self.presentingViewController在這一行是零,甚至被聲明爲保留,永遠不會被釋放。
任何線索?
感謝
嗨,我沒有聲明伊娃,我只是使用@synthesize presentsViewController = _presentingViewController來合成它;我想無論如何都會創建下劃線伊娃。現在它工作正常。該教程中的代碼有很多這樣的小問題,並且我有很多時間修復它們。無論如何,+1爲您的答案。 – SpaceDog 2012-02-26 10:06:49
當你說'我想會創建下劃線伊娃' - 這聽起來像你沒有意識到,這是全部合成。它在編譯時創建var,getter方法和setter方法,這只是爲了節省輸入。如果var,getter或setter已經存在(因爲你輸入了它),它不會再添加它。合成foo;創建一個名爲foo的ivar, - (id)foo;方法和 - (void)setFoo:(id)arg;方法。使用@synthesize上的選項,您可以使用自定義名稱來實現這些選項,但除非您有充分的理由,否則應該使用默認值。 – hooleyhoop 2012-02-26 11:00:53
屬性只是遺留物鏡-c的語法糖。在現代Objective-C(我們用今天的iOS應用程序構建的那種)中,聲明一個與屬性傳導相同名稱的伊娃是不必要的,並且令人困惑(如OP所示)。請參閱https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html – kamprath 2012-02-26 15:41:06