2012-07-01 71 views
1

爲了使舊文件能夠在ARC下編譯,在開發階段設置開關-fno-objc-arc 。使ARC文件與ARC文件兼容

但是隻有.m文件列出了我可以添加-fno-objc-arc。

但我有一些導致ARC錯誤的.h文件。我需要將該開關設置爲這些.h文件。但我在Build階段看不到它們。

那麼,如何設置.h文件的開關?

這裏是導致該問題的.h文件中

\ 
__object__=__array__->arr[0]; for(NSUInteger i=0, num=__array__->num; i<num; i++, __object__=__array__->arr[i]) \ 


typedef struct ccArray { 
    NSUInteger num, max; 
    id *arr; 
} ccArray; 

/** Allocates and initializes a new array with specified capacity */ 
static inline ccArray* ccArrayNew(NSUInteger capacity) { 
    if (capacity == 0) 
      capacity = 1; 

    ccArray *arr = (ccArray*)malloc(sizeof(ccArray)); 
    arr->num = 0; 
    arr->arr = (id*) malloc(capacity * sizeof(id)); 
    arr->max = capacity; 

    return arr; 
} 

static inline void ccArrayRemoveAllObjects(ccArray *arr); 

/** Frees array after removing all remaining objects. Silently ignores nil arr. */ 
static inline void ccArrayFree(ccArray *arr) 
{ 
    if(arr == nil) return; 

    ccArrayRemoveAllObjects(arr); 

    free(arr->arr); 
    free(arr); 
} 

/** Doubles array capacity */ 
    static inline void ccArrayDoubleCapacity(ccArray *arr) 
{ 
    arr->max *= 2; 
    id *newArr = (id *)realloc(arr->arr, arr->max * sizeof(id)); 
    // will fail when there's not enough memory 
    NSCAssert(newArr != NULL, @"ccArrayDoubleCapacity failed. Not enough memory"); 
    arr->arr = newArr; 
} 

    /** Increases array capacity such that max >= num + extra. */ 
    static inline void ccArrayEnsureExtraCapacity(ccArray *arr, NSUInteger extra) 
{ 
     while (arr->max < arr->num + extra) 
      ccArrayDoubleCapacity(arr); 
} 

/** shrinks the array so the memory footprint corresponds with the number of items */ 
static inline void ccArrayShrink(ccArray *arr) 
{ 
NSUInteger newSize; 

    //only resize when necessary 
    if (arr->max > arr->num && !(arr->num==0 && arr->max==1)) 
    { 
      if (arr->num!=0) 
      { 
        newSize=arr->num; 
        arr->max=arr->num; 
      } 
      else 
      {//minimum capacity of 1, with 0 elements the array would be free'd by realloc 
        newSize=1; 
        arr->max=1; 
      } 

      arr->arr = (id*) realloc(arr->arr,newSize * sizeof(id)); 
      NSCAssert(arr->arr!=NULL,@"could not reallocate the memory"); 
    } 
} 

(ID *)的樣品。

+0

如果.m具有-fno-objc-arc標誌,則不應在.h文件中出現ARC錯誤。 – Raspu

+0

有一些.h文件沒有對應的.m文件。 –

+0

即使它們沒有名稱匹配的.m文件,我也希望它們需要#include /#導入到真正的源文件中以成爲編譯的一部分。沒有? –

回答

0

您可以將.h文件分割成一對.h/.m文件對嗎?這樣,您可以將方法體放在.m文件中,編譯爲-fno-objc-arc,並隨意包含.h文件。