Большой вопрос: как можно получить голову вокруг этого? Это просто берет практику. Вы пытаетесь реализовать проектирование баз данных, сталкиваетесь с проблемами со своим дизайном, Вы осуществляете рефакторинг и помните в следующий раз, что работало и что не сделало.
Для ответа на конкретные вопросы... это - определенное добавленное мнение, как в, "как я сделал бы это", не приняв во внимание потребности производительности и такой. Я всегда запускаю полностью нормализованный и иду оттуда на основе реального тестирования:
Table Event
EventID
Title
StartDateTime
EndDateTime
Table ShiftEvent
ShiftEventID
EventID
ShiftSpecificProperty1
...
Table Product
ProductID
Name
Table Category
CategoryID
Name
Table CategoryProduct
CategoryID
ProductID
Также повторению, что Pierre сказал - инструмент ORM, нравится, в спящем режиме, делает контакт с трением между реляционными структурами и структурами OO намного более хорошим.
Sending a message to nil won't cause an error, so this is fine. You need to make sure the pointers are actually nil though - sending a message to a garbage pointer will likely cause errors.
Да, вы можете сделать это, потому что вы можете безопасно отправить сообщение (например, release
) на nil
, и оно просто ничего не сделает.
В Objective-C важно различать объекты и переменные. Вы не можете освободить указатель (значение переменной), вы можете только освободить объект (объект, на который ссылается указатель). Указатель nil не относится ни к какому объекту, поэтому сообщения, отправленные в nil, ничего не делают (что в целом безопасно).
If you use the accessor property to create your get/set methods:
@interface rocketShip : NSObject {
NSString *name;
NSNumber *thrust;
}
@property (retain, nonatomic) NSString *name;
@property (retain, nonatomic) NSNumber *thrust;
And in your .m file:
@synthesize name;
@synthesize thrust;
You can then just set your variable to nil in dealloc. This will in fact call your setter and decrement the reference count by one and clean things up.