2013-09-17 3 views
1

У меня есть некоторые переменные, которые кэшируют некоторые данные из веб-службы.Проблемы с двойными указателями в ARC

Чтобы сделать мой код более динамичным, я хочу вернуть двойной указатель на переменную cache. Значит, это двойной указатель. У меня есть некоторые проблемы с ARC.

Вот что я получил:


- (id *)pointerToSectionCacheProperty:(SomeSection)section { 
    switch (section) { 
     case Section1: 
     { 
      return &_section1Cache; 
     } 
      break; 
     case Section2: 
     { 
      return &_section2Cache; 
     } 
      break; 
     case Section3: 
     { 
      return &_section3Cache; 
     } 
      break; 
    } 

    return nil; 
} 

ARC дает мне следующую ошибку:

Returning 'NSArray *__strong *' from a function with result type '__autoreleasing id *' changes retain/release properties of pointer 

Является ли это неправильный подход?

Если да, то какой правильный подход?

+0

Какую цель выполняет двойной указатель? ARC просто путают, по умолчанию результаты функции авторекламы, что делает ваш NSArray * в качестве своих объявлений? – ImHuntingWabbits

+0

@ImHuntingWabbits Это просто 'strong'variable – NSAddict

+1

Я считаю, что правильное объявление было бы (сильным NSArray **), так как вызывающему будет эффективно управлять этим объектом самостоятельно, если они изменят значение. – ImHuntingWabbits

ответ

1

Решение


Понял работает так:


- (NSArray *__strong *)pointerToSectionCacheProperty:(SomeSection)section { 
    switch (section) { 
     case Section1: 
     { 
      return &_section1Cache; 
     } 
      break; 
     case Section2: 
     { 
      return &_section2Cache; 
     } 
      break; 
     case Section3: 
     { 
      return &_section3Cache; 
     } 
      break; 
    } 

    return nil; 
} 

Как Замечание, - (id __strong *)... будет работать так же хорошо.

Смежные вопросы