I would probably choose #2 (to keep it simple). If the property is only set once (in the subclass init method), you could override the property setter method in the superclass, and do the additional stuff there.
Untested code:
- (void)setProp:(PropertyType *)prop
{
_prop = prop; // (Assuming ARC)
[_prop doSomething];
}