There is no real difference, as they all accomplish the same result. But here's the details:
Option 1 vs. Option 2:
Declaring the iVar is redundant, as a property creates it for you. A property's main job is to automatically create accessor methods, (setX and getX) and can furthermore define how these are accessed (atomically or not) or how the value is stored in memory (simply assigned like any ivar? strong or weak?). My recommendation is that you forget about Option 1 and always stick to Option 2 e.g.
@property (nonatomic, strong) UIView *yourView;
--
Option 2 vs. Option 3
(Let's skip the fact that your Option 3 is another iVar and assume you declared a @property here, cause that's more interesting)
There is no difference except for the fact that if you declare the property in your implementation file (.m), others, who include your header, will not see it i.e. it's "kind of private". (Sometimes referred to as 'Private Interface'). As a matter of fact, it's not truly private as one can still call the selector (dynamic nature of obj-c). Nevertheless it's good practice to hide your implementation and only expose what's truly necessary in your header file.
Therefore, use Option 3 for internal stuff, and Option 2 for external stuff.