为了快速掌握oc的基本语法,按照上面文章速度学习oc .大概用了4~5天时间。粗越了解下oc.只是粗越了解。
目的主要还是实践 这个 “学习理论”。并完善这个学习理论。
鬼知道以后还要学习多少语言呢?
1.数字处理:四则运算。
2.字符串处理:分割和组合。
3.集合处理:可变和不可变集合。 dictionary(oc没写例子)
4.对象和继承:人,雇员,老板, 放入集合并多态的表示他们的薪水和税收。
5.意图和实现的分离(事件):单个函数指针的实现(c风格和block)。一组函数指针的实现(protocal)
6.io的处理。没写
7.内存管理
// // main.m // practice // // Created by liangshun on 18/5/30. // Copyright © 2018年 liangshun. All rights reserved. // #import <Foundation/Foundation.h> @protocol PPerson <NSObject> -(NSString *) Walk; -(NSString *) Eat; -(float) PayTax; @end @interface basePerson : NSObject @property NSString* name; @property float money; @end @implementation basePerson -(id)init{ self=[super init]; if(self!=nil) { self.name=@""; self.money=100; } return self; } -(id)init_with:(float)m { if(self=[super init]) { self.name=@""; self.money=m; } return self; } @end @interface Employee : basePerson <PPerson> @end @implementation Employee -(NSString *)Walk { return [NSString stringWithFormat:@"%@ is walking.",self.name]; } -(NSString *)Eat { return [NSString stringWithFormat:@"%@ is eating.",self.name]; } -(float) PayTax { return self.money*0.1; } @end @interface Boss : basePerson <PPerson> @end @implementation Boss -(NSString *)Walk { return [NSString stringWithFormat:@"%@ has a car !",self.name]; } -(NSString *)Eat { return [NSString stringWithFormat:@"%@ is eating good food.",self.name]; } -(float) PayTax { return self.money*0.2; } -(void) GetMoney { NSLog(@"boss get money"); } @end @interface RoadPeoele : NSObject @property NSString* name; -(float) PayTax; @end @implementation RoadPeoele -(float) PayTax { return 0; } @end void showMeTax(id<PPerson> p) { NSLog(@"执行接口方法:%f",[p PayTax]); } int main(int argc, const char * argv[]) { Employee *andy=[[Employee alloc ] init_with:40]; andy.name=@"Andy"; Boss *linson=[[Boss alloc] init_with:100]; linson.name=@"linson"; RoadPeoele *tt=[RoadPeoele new]; tt.name=@"TT"; //宽松的多态-multablearrays。可以放入任何类型 NSMutableArray *allworker=[NSMutableArray new]; [allworker addObject:linson]; [allworker addObject:andy]; [allworker addObject:tt]; for(int i=0;i<[allworker count];i++) { NSLog(@"%@,pay tax:%f",[allworker[i] name],[allworker[i] PayTax]); } //宽松的多态-array 可以放入任何类型 NSArray *allp=[NSArray arrayWithObjects:linson, andy,tt, nil]; for(int i=0;i<[allp count];i++) { NSLog(@"%@,pay tax:%f",[allp[i] name],[allp[i] PayTax]); } //宽松的多态-<T> 可以放入任何类型!!!!!!why? NSArray<PPerson> *allp2=[NSArray<PPerson> arrayWithObjects:linson, andy,tt, nil]; for(int i=0;i<[allp2 count];i++) { NSLog(@"%@,pay tax!!!:%f",[allp2[i] name],[allp2[i] PayTax]); showMeTax(allp2[i]); } return 0; }