iOS里面 ViewController对象里面为什么可以调用tabBarItem这个属性???

//接口文件
#import <UIKit/UIKit.h>

@interface BNRHypnosisViewController : UIViewController

@end

//实现文件
@implementation BNRHypnosisViewController
 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        // Set the tab bar item's title
        self.tabBarItem.title = @"Hypnotize";
        UIImage *image = [UIImage imageNamed:@"Hypno.png"];

        // Put that image on the tab bar item
        self.tabBarItem.image = image;
        NSLog(@"!!!%@",self);
    }

    return self;
}
@end

在UIViewController里面并没有UITabBarItem *tabBarItem 这个属性... 想知道self.tabBarItem是怎么回事???

可以command进去看一下UIKit
图片说明
从这里可以看到UIViewController有一个UITabBarControllerItem的扩展类,然后在这个扩展类里有一个tabBarItem和tabBarController的成员变量,所以在UIViewController里面是可以调用self.tabBarItem的。

...你贴出来的是UITabBarController.h的内容, 但是UIViewController.h 并没有这个"分类".
1.单独建立一个只有UIViewController的工程,你任然可以在代码里:调用self.tabBarItem.
2.UITabBarController.h中的那是个分类吧,在分类中添加属性???它的实现我怎么找不到...