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];
}