簡體   English   中英

如何在使用ARC和定位iOS 4.0時替換弱引用?

[英]How do I replace weak references when using ARC and targeting iOS 4.0?

我已經開始使用Xcode 4.2開發我的第一個iOS應用程序,並且使用“實用程序應用程序”模板(FlipsideViewController附帶的模板)定位iOS 5.0。

我讀到,因為ARC是一個編譯時功能,它也應該與iOS 4兼容,所以我試圖將我的應用程序定位到4.3,並嘗試編譯它。 當我這樣做時,我收到此錯誤:

FlipsideViewController.m:錯誤:自動引用計數問題:當前部署目標不支持自動__weak引用

它引用了這一行:

@synthesize delegate = _delegate;

該變量聲明為:

@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

我知道iOS 4中不支持“弱引用”,但我真的不明白為什么我想要使用弱引用開始,也不能弄清楚如何重寫事物以避免使用它,仍然利用ARC(畢竟,它應該適用於iOS 4和5嗎?)

要定位較舊的操作系統,您可以在屬性聲明中使用unsafe_unretained而不是weak ,並且它應該以相同的方式工作。 當目標消失時, weak引用為零,但unsafe_unretained會打開你被鏈接的對象在被解除分配時變成懸空指針的可能性。 后者的行為與在手動內存管理中使用assign作為屬性聲明的行為相同。

你這樣做是為了避免保留周期,我在這里的回答中提到 您不希望有一個強指針指向可能有強指針返回原始對象的東西。 然后什么都不會被正確釋放。

如果僅使用弱引用來獲得額外的安全性,則在新的運行時函數可用時手動調用它們,如果沒有,則回__unsafe_unretained變量的簡單賦值。

ZWRCompatibility.h將稍微簡化一下。

感謝Mike Ash的兼容性庫PLWeakCompatibilty ,您現在也可以在iOS 4.x上使用__weak。

它非常容易配置,無需額外考慮或努力超過5.x.

暫無
暫無

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

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