类方法和对象方法区别与联系
// #import @interface Calculator : NSObject { } // 求和 // sumWithNumber1:andNumber2: - (int)sumWithNumber1:(int)number1 andNumber2:(int)number2; //类方法以加号开头 //sumWithNumber1:andNumber2: + (int)sumWithNumber1:(int)number1 andNumber2:(int)number2; + (int)averageWithNumber1:(int)number1 andNumber2:(int)number2; - (int)averageWithNumber1:(int)number1 andNumber2:(int)number2; + (void)test; @end // #import "Calculator.h" @implementation Calculator - (int)sumWithNumber1:(int)number1 andNumber2:(int)number2 { } + (int)sumWithNumber1:(int)number1 andNumber2:(int)number2 { // // // // } + (int)averageWithNumber1:(int)number1 andNumber2:(int)number2 { // // } - (int)averageWithNumber1:(int)number1 andNumber2:(int)number2 { // } + (void)test { // } @end // #import #import "Calculator.h" int main(int argc, const char * argv[]) { // // // // // // // // // // // } |
类方法应用--一般用于编写工具方法
// #import typedef enum { }IColor; @interface Iphone : NSObject { } - (void)aboutMyPhone; //根据传入的颜色枚举返回对应的颜色 + (NSString *)StringWithColor:(IColor)color; @end // #import "Iphone.h" @implementation Iphone - (void)aboutMyPhone { } // 这个方法称之为工具方法 + (NSString *)StringWithColor:(IColor)color { } @end // #import #import "Iphone.h" int main(int argc, const char * argv[]) { } |
匿名对象
// 使用场景:当对象方法只调用一次的时候可以使用匿名对象 // 匿名对象可以作为实参传递 // #import #import "Iphone.h" #import "Person.h" int main(int argc, const char * argv[]) { // // // // // // // // // // // // // // // // // } // #import #import "Iphone.h" @interface Person : NSObject - (void)sendSignal:(Iphone *)iphone; @end // #import "Person.h" @implementation Person - (void)sendSignal:(Iphone *)iphone { } @end // #import @interface Iphone : NSObject { } - (void)aboutMyPhone; - (void) brand; - (void)callWithNumber:(NSString *)number; @end // #import "Iphone.h" @implementation Iphone - (void)aboutMyPhone { } - (void)brand { } - (void)callWithNumber:(NSString *)number { } @end |
封装
封装性:隐藏对象属性和实现的细节,(对属性的封装) // #import typedef enum { }IColor; @interface Gun : NSObject { // // } - (void)setModel:(NSString *)model; - (NSString *)model; - (void)setColor:(IColor)color; - (IColor)color; //- (void)setSerial:(NSString *)serial; - (NSString *)serial; - (void)shoot; //上子弹 - (void)addBulletCount:(int)count; - (void)setBulletCount:(int)bulletCount; - (int)bulletCount; @end // #import "Gun.h" @implementation Gun - (void)shoot { } - (void)addBulletCount:(int)count { // } - (void)setBulletCount:(int)bulletCount { } - (int)bulletCount { } - (void)setModel:(NSString *)model { } - (NSString *)model { } - (void)setColor:(IColor)color { } - (IColor)color { } //- (void)setSerial:(NSString *)serial //{ // //} - (NSString *)serial { } @end // #import #import "Gun.h" int main(int argc, const char * argv[]) { // // // // // // } |
封装练习
// #import @interface KLine : NSObject { } - (void)setMinPrice:(int)minPrice; - (int)minPrice; - (void)setMaxPrice:(int)maxPrice; - (int)maxPrice; - (int)averagePrice; @end // #import "KLine.h" @implementation KLine - (void)setMinPrice:(int)minPrice { } - (int)minPrice { } // set方法监听了属性(成员变量)的改变 - (void)setMaxPrice:(int)maxPrice { } - (int)maxPrice { } - (int)averagePrice { } @end // #import #import "KLine.h" int main(int argc, const char * argv[]) { } |
组合模式
组合模式 • • • 组合模式示例1 女孩打电话给土豪 找出这一示例中必须存在的对象 组合模式示例2 女孩开车 女孩玩ipad 分析出下面两个场景中的对象 找对象 类名: Ipad 属性: 功能:玩游戏,写邮件,写word文档,听音乐,查找资料,看电影 类名:Car 属性: 功能:跑,加速,减速,听radio,听音乐withCD // #import #import "Ipad.h" typedef struct { }SanWei; @interface Girl : NSObject { } - (void)setAge:(int)age; - (int)age; - (void)setSanWei:(SanWei)sanWei; - (SanWei)sanWei; - (void)setAddress:(NSString *)address; - (NSString *)address; - (void)setIpad:(Ipad *)ipad; - (Ipad *)ipad; // 女孩通过iPad玩游戏 - (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name; // 女孩听音乐 - (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name; // 女孩看电影 - (void)watchVideoWithIpad:(Ipad *)ipad andVideoName:(NSString *)name; // 女孩写邮件 - (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddress:(NSString *)address andEmailContent:(NSString *)content; // 女孩买了ipad后 // 女孩跟ipad的关系非常紧密,女孩类中很多方法都用到了ipad对象,所以我们把ipad设置为女孩的成员变量,因为成员变量在所有的对象方法中都可以方法 - (void)playGameWithName:(NSString *)name; - (void)listenMusicWithName:(NSString *)name; - (void)watchVideoWithName:(NSString *)name; - (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content; @end // #import "Girl.h" @implementation Girl // 女孩通过iPad玩游戏 - (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name { } // 女孩听音乐 - (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name { } // 女孩看电影 - (void)watchVideoWithIpad:(Ipad *)ipad andVideoName:(NSString *)name { } // 女孩写邮件 - (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddress:(NSString *)address andEmailContent:(NSString *)content { } #pragma mark - 增强后 - (void)playGameWithName:(NSString *)name { } - (void)listenMusicWithName:(NSString *)name { } - (void)watchVideoWithName:(NSString *)name { } - (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content { } - (void)setAge:(int)age { } - (int)age { } - (void)setSanWei:(SanWei)sanWei { } - (SanWei)sanWei { } - (void)setAddress:(NSString *)address { } - (NSString *)address { } - (void)setIpad:(Ipad *)ipad { } - (Ipad *)ipad { } @end // #import typedef enum { }IColor; @interface Ipad : NSObject { } // 玩游戏 - (void)playGameWithName:(NSString *)name; // 听音乐 - (void)listenMusicWithName:(NSString *)name; //看电影 - (void)wacthVideoWithName:(NSString *)name; //发邮件 - (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content; @end // #import "Ipad.h" @implementation Ipad // 玩游戏 - (void)playGameWithName:(NSString *)name { } // 听音乐 - (void)listenMusicWithName:(NSString *)name { } //看电影 - (void)wacthVideoWithName:(NSString *)name { } //发邮件 - (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content { } @end // #import #import "Girl.h" int main(int argc, const char * argv[]) { // // // // } |