10.5 базовый SDK, 10.4 развертывание: как реализовать недостающие методы - PullRequest
1 голос
/ 27 мая 2009

У меня есть проект, который нацелен как на Mac OS X 10.4, так и на 10.5, где 10.5 - это базовый SDK.

Некоторые методы, такие как -[NSString stringByReplacingOccurrencesOfString:withString], недоступны в 10.4. Я мог бы просто реализовать функциональность вручную. Другой вариант - реализовать метод как категорию, но это может привести к путанице в реализации 10.5, и я бы хотел этого избежать.

Итак, как мне реализовать такие методы в 10.4, не испортив 10.5 и таким образом, чтобы я мог легко вынуть реализацию, когда решу прекратить поддержку 10.4?

Ответы [ 6 ]

2 голосов
/ 27 мая 2009

Использовать категорию, но поставить метку на имени метода; например, stringByReplacingOccurrencesOfString_TigerCompatible:. В реализации вызывайте либо реализацию Leopard, либо свою собственную.

Когда вы переходите на Leopard-only, выполните поиск проекта для TigerCompatible, затем запишите все эти методы и снимите метки со всех их сайтов вызовов.

2 голосов
/ 27 мая 2009
if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)])
{
  // 10.5 implementation
}
else
{
  // 10.4 implementation
}
2 голосов
/ 27 мая 2009

Я думаю, вы должны использовать +load и +initialize до загрузить метод во время выполнения , если метод еще не существует.

1 голос
/ 28 мая 2009

Поместите все недостающие реализации в категории в пакете, который загружается при запуске в main (), если работает под Tiger.

0 голосов
/ 27 мая 2009

Нужно ли поддерживать 10,4? Если вы используете методы 10.5 только в основных частях своего приложения, то, возможно, пришло время подумать о переходе только на 10.5.

В любом случае, с приведенным выше конкретным примером, я предлагаю отойти от этого и сделать изменяемую копию вашей строки, чтобы вы могли использовать аналогичный метод для NSMutableString, который работает в 10.4

0 голосов
/ 27 мая 2009

Как насчет использования макроса препроцессора C для вставки соответствующих методов, если он собирается для 10.4? Может быть, попытаться сделать что-то подобное в категории, так что те методы, которые не существуют в 10.4, включены, только если он собирается для 10.4?

#if defined(MAC_OS_X_VERSION_10_4) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
// Put your implementations of the methods here
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...