In answer to the first question, probably the first option. Its just smooshing everything together for Money
at compile time. Compilers and Pre-Compilers are clever.
You can use private headers to accomplish what you are trying to do
A public header file Money.h
//Money.h
@interface Money : NSObject
//public decl
@end
A private header file for subclasses Money-Private.h
//Money-Private.h
@interface Money ()
@property(nonatomic) NSUInteger amount;
@end
Which is used by the implementation of Money
and any subclasses or categories e.g
The public face of dollar Dollar.h
#import "Money.h"
@interface Dollar:Money
@end
and the implementation Dollar.m
#import "Money-Private.h"
@implementation Dollar
-(void)foo
{
self.amount = 75;
}
@end
Should you ever choose to create a public framework then make sure only the public headers get copied into the bundle.