2011-02-15 70 views
4

我有一個名爲'estimatedTime'的自定義類的NSInteger屬性,現在,在我的UITableView類中我試圖將該屬性作爲指向UITableViewCell的指針。我似乎無法讓它工作!我已經試過如下:Objective-C指針>指向屬性

NSInteger *pointer = sharedManager.tempTask.&estimatedTime; 
NSInteger *pointer = &sharedManager.tempTask.estimatedTime; 

我得到的錯誤:需要左值作爲一元「&」操作數 和:預期標識符之前「&」令牌

你能不能一個指針傳遞給一個屬性?財產不只是它自我指向我的自定義類中的伊娃嗎?我需要它作爲指針類型,以便在UITableViewCell內部更改UITextField時編輯值。

謝謝,並希望它是有道理的!

+0

想想你在問什麼。做這種直接訪問違反了面向對象封裝的每一個原則。它會打破噸的東西;鍵值觀察,任何類型的內部設置邏輯,驗證,更改通知,委託......所有可能的中斷。 – bbum 2011-02-15 16:32:27

回答

14

屬性不是變量;它們只是get/set風格方法的語法糖。因此,您無法取得財產的地址。

+0

因此,在我的自定義類的特定實例中,沒有辦法獲取ivar的內存位置? – Darthtong 2011-02-15 11:56:14

+0

如果你擁有這個類,那麼只需添加一個方法返回一個指向內部伊娃的指針。 – 2011-02-15 12:01:15

3

正如馬塞洛所說,你不能使用屬性本身來做到這一點。

你要麼必須:

  1. 添加一個方法來tempTask返回一個指向estimatedTime伊瓦爾(NSInteger *pointer = sharedManager.tempTask.estimatedTimePointer
  2. 使用臨時NSInteger,利用其地址爲你需要的任何電話,然後結果複製到estimatedTime

選項1可能是一個非常糟糕的主意,因爲我破解對象封裝。

0

對於在指針中使用數字我建議使用NSNumber *而不是NSInteger *(NSInteger實際上是一個int)。例如,如果sharedManager.tempTask.estimatedTime是一個NSInteger,你可以這樣做:

NSNumber *pointer = [NSNumber numberWithInt:sharedManager.tempTask.estimatedTime]; 

現在,當你想使用int值的數量做:

NSInteger i = [n intValue]; 

的NSNumber的是*一個obj-c對象,所以通常的保留/釋放/自動釋放機制適用。

0

其實,當你說Object1.Propertyxy.Property1

它實際上是作爲函數調用,而不是在一些內存變量/值。

在你的情況「tempTask」將作爲一個 功能和「estimatedTime」作爲 參數和結果將是函數的返回 。

我知道並完全同意,指針是非常有利的增長速度,但在這種情況下,它僅僅是無用的,因爲它需要的地方存儲該屬性,然後參照我,只是一個時間和內存的浪費,去因爲它只有當你必須使用非常specefic財產每次運行100次:D

希望這有助於,如果它不只是讓我知道,我會很樂意提供幫助。