面向?qū)ο蟮娜筇卣?/h2>

1.封裝

屏蔽內(nèi)部實現(xiàn)的細(xì)節(jié), 僅僅對外提供公有的方法/接口

實例變量修飾符
 
 @public
 >可以在其它類中訪問被public修飾的成員變量
 >也可以在本類中訪問被public修飾的成員變量
 >可以在子類中訪問父類中被public修飾的成員變量
 
 @private
 >不可以在其它類中訪問被private修飾的成員變量
 >可以在本類中訪問被private修飾的成員變量
 >不可以在子類中訪問父類中被private修飾的成員變量
 
 @protected
 >不可以在其它類中訪問被protected修飾的成員變量
 >可以在本類中訪問被protected修飾的成員變量
 >可以在子類中訪問父類中被protected修飾的成員變量
 
 注意: 默認(rèn)情況下所有的實例變量都是protected
 
 @package
 >介于public和private之間的
 如果是在其它包中(framework外部)訪問那么就是private的
 如果是在當(dāng)前代碼所在的包(framework內(nèi)部)訪問就是public的
 這個特性,很適合用于開發(fā)第三方的靜態(tài)類庫,因為多數(shù)人并不希望讓別人知道自己屬性的值。
 
 實例變量修飾符作用域: 從出現(xiàn)的位置開始, 一直到下一個修飾符出現(xiàn)
 如果沒有遇到下一個實例變量修飾符, 那么就會修飾后面所有的實例變量

2.繼承

只要A類繼承了B類, 那么A類就擁有了B類的所有屬性和方法(對象方法和類方法),可以利用繼承來解決當(dāng)前重復(fù)代碼太多的問題,缺點是耦合性太強。

3.多態(tài)

  • 事物的多種表現(xiàn)形態(tài)
  • 在程序中如何表現(xiàn):父類指針指向子類對象
  • 優(yōu)點:提高了代碼的擴展性
  • 注意點:如果父類指針指向子類對象, 如果需要調(diào)用子類特有的方法, 必須先強制類型轉(zhuǎn)換為子類才能調(diào)用

繼承和封裝比較常見,就不舉例了,下面是多態(tài)的例子。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 添加子控制器
    [self setupChildVc:[[TWFriendsNewsController alloc] init] title:@"朋友圈" image:@"tabBar_essence_icon" selectedImage:@"tabBar_essence_click_icon"];
    [self setupChildVc:[[TWFriendsController alloc] init] title:@"好友" image:@"tabBar_friendTrends_icon" selectedImage:@"tabBar_friendTrends_click_icon"];
    
    [self setupChildVc:[[TWBlogViewController alloc] init] title:@"日志" image:@"tabBar_new_icon" selectedImage:@"tabBar_new_click_icon"];
    
    
    
    [self setupChildVc:[[TWMeViewController alloc] init] title:@"我的主頁" image:@"tabBar_me_icon" selectedImage:@"tabBar_me_click_icon"];
    
    // 更換tabBar
    [self setValue:[[TWTabBar alloc] init] forKeyPath:@"tabBar"];
}

/**
 * 初始化子控制器
 */
- (void)setupChildVc:(UIViewController *)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
    // 設(shè)置文字和圖片
    vc.navigationItem.title = title;
    vc.tabBarItem.title = title;
    vc.tabBarItem.image = [UIImage imageNamed:image];
    vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImage];
    
    // 包裝一個導(dǎo)航控制器, 添加導(dǎo)航控制器為tabbarcontroller的子控制器
    TWNavigationController *nav = [[TWNavigationController alloc] initWithRootViewController:vc];
    [self addChildViewController:nav];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容