プロパティとインスタンス変数について、質問があります。

------ サンプル1

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *text1;

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];
    self.text1.text = @"test";
}

------ サンプル2

#import "ViewController.h"

@interface ViewController () {
    __weak IBOutlet UITextField *text1;
}

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];
    text1.text = @"test";
}

上記の2つを実行すると、どちらもTextFieldにtestと表示されます。

サンプル1ですが、_text1.text = @"test" でも表示されます。
これも意味は理解できます。

ただどういった状況でプロパティに宣言するか、インスタンス変数として宣言するか、使い道が理解出来ません。
だんだん迷ってどうすれば?って感じになってます。

どなたか教えて頂けないでしょうか。よろしくお願いします。

環境ですが、
OS X 10.9.5
Xcode6.1.1
です。