簡體   English   中英

UIGraphicsGetCurrentContext():我們應該將CGContext作為函數參數

[英]UIGraphicsGetCurrentContext(): Should we put CGContext as function parameter

我正在使用Core Graphic庫在drawRect方法下的UIView上進行繪制。 眾所周知,在這種方法下,我們首先通過以下方式獲取上下文:

- (void)drawRect:(CGRect)rect {
   CGContextRef context = UIGraphicsGetCurrentContext();
}

我經常使用輔助方法進行繪制。 因此,在輔助方法中,我應該將此上下文作為參數。 例如:

- drawCircle:(CGContextRef)context center:(int)center radius:(int)radius {
// drawing here
} 

或者我們稍后可以在輔助函數中獲取上下文變量:

- drawCircle: center:(int)center radius:(int)radius {
CGContextRef context = UIGraphicsGetCurrentContext();
// drawing here
}

我已經測試過了,經常看不到任何問題。 但是恐怕,當我調用另一個方法時,會發生一些變化,並且UIGraphicsGetCurrentContext()將返回不同的上下文變量。 那么第二種方式安全嗎? 因為它將使我的代碼更清晰。 如果有錯,請告訴我在什么情況下會錯?

謝謝 :)

好問題。 我在UIGraphicsGetCurrentContext文檔中注意到:

默認情況下,當前圖形上下文為nil。 在調用其drawRect:方法之前,視圖對象將有效上下文推送到堆棧上,使其成為當前堆棧。 但是,如果未使用UIView對象進行繪制,則必須使用UIGraphicsPushContext函數將有效上下文手動推入堆棧。

在iOS 4及更高版本中,您可以從應用程序的任何線程調用此函數。

聽起來好像最后一句話暗示該函數是線程安全的,並且通常來說,對於線程,您似乎擔心,如果在不同位置訪問相同的函數或屬性,則可能會訪問不同的內容,或者它們可能無法正確同步因此您可能會從兩個不同的地方獲取不同的信息。

我會假設,如果它暗示此函數是線程安全的,則從其他函數訪問此函數無關緊要,因為它應該給您相同的結果,尤其是在您甚至不使用線程的情況下,所以也許這是還有優先事項嗎?

就是說,在該引用的第一段中,第二句提到手動將有效上下文推入堆棧。 如果您在上下文中傳遞的地方編寫drawCircle的代碼,則似乎具有更大的靈活性,因為可以傳遞不同的上下文(如果出於某些原因,這很有用),但是如果您進行硬編碼,則只能使用UIGraphicsGetCurrentContext()返回的默認上下文。 。

這是文檔的鏈接: UIGraphicsGetCurrentContext文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM