2013-10-11 2 views
0

Итак, в основном, вот что я хочу сделать. Я тестирую класс и для этого хочу переопределить «сегодня» (или «сейчас»), что означает, что я могу проверять переходы даты и другие связанные свойства, просто заявляя, скажем, «завтра сейчас», а затем напишите мои утверждения.Включенная категория распространяется на другие включенные файлы?

Моя идея - разместить пользовательскую тестовую категорию в NSDate (NSDate + Test). Но в данный момент я не уверен, как и где эта категория будет распространяться. Я хочу сказать, будет ли мой тест класса (который использует NSDate) автоматически начнет использовать NSDate + Test?

Просто для иллюстрации:.

#include "MyClassUnderTest.h" 
#include "NSDate+Test.h" 

// Will MyClassUnderTest.h see and use NSDate+Test at all times? 

ответ

0

Среда счастливо добавить методы NSDate, но компилятор выдаст ошибку, если вы пытаетесь отправить сообщение, что он не видел объявленную *

До тех пор, пока вы импортируете заголовок, ваш класс сможет использовать ваши новые методы.

Если вы говорите о «переопределении» методов класса каркаса в категории, вы должны знать, что каждый использование этого метода в вашем процессе будет использовать новую версию. Поэтому, если вы clobber +[NSDate date], даже внутренние вызовы Cocoa на date будут использовать вашу версию. ** Это может легко привести к странному, даже опасному поведению. Вы должны предпочесть насмехаться над этим видом скрежета.

Также обратите внимание, что из-за этого явления вы должны всегда префиксные методы, которые вы добавляете в рамки классов через категории.


* В соответствии с ARC, по крайней мере.

** Предполагая, что date первоначально не был реализован в категории; в этом случае результатом является «неопределенное поведение».

+0

Хорошо, большое спасибо! Это то, что я подозревал, но без четкого понимания того, почему. Теперь я делаю! –

+0

Уверенная вещь, рад, теперь ясно. –

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