(Objective-C的新手,但熟悉C/C++)。在Objective-C類中使用函數指針成員變量
目前我有一個Objective-C類,它的一些成員變量將是函數指針。這些函數指針只會被類本身修改,但可能被其他類使用。
我不知道如何設置對所述函數指針的訪問。
我目前所設想的解決方案是聲明所述函數指針@public,據我瞭解,它將允許我使用 - >運算符來調用它們。這對我來說似乎不太令人滿意,因爲函數指針是可以插入的,它會在聲音OOP中飛行。
我的下一個傾向是使用@property,並聲明它們是隻讀的。這似乎更理智。我假設我會使用點運算符來調用它們,因爲使用getter來獲取函數指針然後調用它的想法看起來完全可笑。
可以使用函數指針作爲屬性嗎?如果是這樣,我怎麼會去聲明這些是屬性:
void (*sort)(SET, int) ;
char *(*toASCII)(CARD) ;
我有一種感覺,我缺少一個輕微的細微差別來聲明這些作爲屬性。
謝謝,這看起來不錯。非原子的任何具體原因?我假設這是因爲它是隻讀的,我不必擔心丟失的更新。如果我理解正確的話,這應該比它保持原子性能更好。 – 2010-09-27 03:34:14
從我的理解中,原子vs非原子在做只讀屬性時沒有什麼區別。並且,對於指針和標量,非原子和原子訪問器是相同的(對指針或32位值的寫入是原子的,因爲它只需要一個處理器指令)。但是,一般來說,非原子訪問器比原子訪問器執行得更好,因爲它需要更多的努力來完成創建原子訪問器所需的鎖等。 – Jacques 2010-09-27 03:56:47
@JohnCarter'nonatomic'已經成爲Objective-C中屬性的事實上的默認值。當Obj-C屬性被炮製時,設想線程化將變得越來越流行,並且將代碼標記爲顯式地「線程不安全」('nonatomic')會使默認('atomic')更安全,儘管更慢。實際上,同樣的應用程序線程沒有像他們認爲的那樣趕上,許多應用程序大多數都是用單線程編寫的,用於完全不同的目的,線程安全的「屏障」代碼(橋樑)在它們之間。 _TL; DR:它是'nonatomic' b/c大多數Obj-C是,或者至少以nonatom開始。 – 2015-02-17 07:19:00