現在MVVMパターンでアプリを開発しているのですが、色々と調べたりコードを書いたりしても分からないところがあるので質問させていただきたいです。
サンプルで以下に自分なりにMVVMパターンを使用したごく簡単なコードを書いてみました。

ViewController.m

@interface ViewController ()

@end

@implementation ViewController {
    ViewModel *viewModel;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    viewModel = [[ViewModel alloc] initWithSelf:self];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [viewModel vmGetItemsCount];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [viewModel vmSetTableViewCell:tableView :indexPath];
}

@end

ViewModel.m

@implementation ViewModel {
    ViewController *selfObject;
    NSArray *items;
}

- (id)initWithSelf:(ViewController *)vcSelfObject {
    if (self = [super init]) {
        selfObject = vcSelfObject;
        items = @[@"Model", @"View", @"ViewModel"];
    }

    return self;
}

- (NSInteger)vmGetItemsCount {
    return [items count];
}

- (UITableViewCell*)vmSetTableViewCell:(UITableView*)tableView :(NSIndexPath*)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = items[indexPath.row];

    return cell;
}

@end

まずViewDidLoadViewModelのインスタンスを生成しているのですが、viewModel内でViewControllerのUIを操作しないといけないので、viewModel = [[ViewModel alloc] initWithSelf:self];というようにViewControllerselfを引数で渡してViewModelでそのselfを保持しておくというやり方は正しいやり方でしょうか?色々なサイトを見ていると、viewModel = [[XXviewModel alloc] init];としか書かれていないのですが、ViewModel内でUIの操作をしたいときにいちいち関数の引数にselfを書くのは冗長なのではないかなと思ったからです。
そしてinitWithSelfが実行されると各変数を初期化していくのですが、このイニシャライザ内でNSArrayを初期化するのは正しいやり方でしょうか?ここでNSArrayを初期化するのではなく、ViewControllerviewDidLoad[viewModel vmSetDataToItems];のような形で初期化させた方がいいでしょうか?はたまたここは特にそういうことは意識することなくどっちでもいいでしょうか?
長々とすみません、最後になるのですが、MVVMパターンを使うとViewController内の関数は全体的にnumberOfRowsInSectioncellForRowAtIndexPathのように[viewModel XXXXXX]という形で一行だけになっていくのでしょうか?

分からないことが多々あり、勘違いしたまま質問をしているかもしれませんが、どなたか詳しい方がいれば教えていただきたいです。すみませんが、よろしくお願いします。