我在問,因爲我涉及到一些複雜的塊代碼,我不希望以下代碼正常工作。基本屬性的ivars有哪些數據類型?
說我們有一個布爾屬性,像這樣:
@property (nonatomic, assign) BOOL isCancelled;
它的自動合成的,沒有自定義的getter,沒有setter,沒有明確的伊娃。
然後,是這段代碼......這些完美的作品
dispatch_async(queue, ^{
id result = block(&_isCancelled);
if (!_isCancelled) { ... }
}
不過,我本來期望它的工作塊()調用,而不是爲據認爲,如果我認爲它會捕捉_isCancelled的值並保持爲const,而不是在整個執行過程中進行變異。儘管如此,在運行時,_isCancelled的值在塊內部/外部始終保持一致,就好像它實際上一樣BOOL *
任何人都可以解釋發生了什麼?
在給定的代碼中沒有實際使用屬性,'_isCancelled'只是一個普通的* ivar *,儘管它是隱式聲明的。 – Sulthan
同意,但由於沒有明確聲明,我可以假定它被聲明爲指針而不是原語。這可以解釋行爲(除非我錯過了某些東西) – CatalinM
屬性的類型與支持ivar的類型相同。聲明'BOOL isCancelled'屬性意味着一個ivar BOOL _isCancelled將被合成。就這樣。 – Sulthan