你有大幅兩個選項:
添加-fno-objc-arc
標誌你不想轉換成ARC的文件,當然你不能將它們轉換否則將無法編譯,在最好的情況,並在最糟糕的情況下泄漏。
轉換所有類並解決C結構中Objective-C對象的問題。
關於第二個解決方案,您再有幾個選項:
與成熟的對象替換C的結構,讓ARC處理內存爲您
繼續使用C結構並將其中的對象標記爲__unsafe_unretained
,它們基本上會告訴ARC忽略用於內存管理的那些對象。因此,你會碰到這樣的:
typedef struct {
NSInteger anInteger;
__unsafe_unretained NSString * aString;
} AStruct;
這將ARC下編譯,它是你必須保持一個C結構內Objective-C對象的唯一選擇。請記住,ARC不會管理這些對象的內存,所以你已經手動處理它。
底線,我的建議是將您的C結構轉換爲類。舉個例子,你可以輕鬆地將上面的結構爲:
@interface AStructReplacement : NSObject
@property (nonatomic, assign) NSInteger anInteger;
@property (nonatomic, strong) NSString * aString;
@end
這是更安全,更連貫,更容易比C結構使用。
感謝轉換爲ARC工作得很好,但結構化對象沒有保留價值,多數民衆贊成爲什麼應用程序開始崩潰 – Archive
我明白將C結構轉換爲更安全的目標c類,但我使用了類似於typedef的第二個選項struct NS {int anInteger; __unsafe_unretained NSString * aString; } AStruct;因爲它在整個項目中很難改變。 – Archive
你應該顯示一些代碼 –