ios学习之旅---oc面向对象的特点
来源:互联网 发布:网络推广的岗位职责 编辑:程序博客网 时间:2024/06/05 18:15
1.OC简介
Objective-C是一种面向对象的计算机语言,Brad J Cox 1980s 设计了Objective-C,
该语言是基于SmallTalk-80。1988 NeXT 发布了Objective-C,它的开发环境和类库叫
“NEXTSTEP”,1994年NeXT与Sun发布了标准的NEXTSTEP系统,取 名“OPENSTEP”,
软件自由基金会OPENSTEP版本叫GNUStep。
1996 苹果公司开始支持NeXT,把NEXTSTEP/OPENSTEP用于 Mac OS X操作系统开发,
它的版本和开发环境叫Cocoa,使用 Objective-C作为基础语言,开发工具Xcode和Interface Builder。
2007 苹果公司推出Objective-C 2.0,Objective-C是Mac OS X和 iOS开发的基础语言
特点:
OC不是一门全新的语言
C语言的基础上增加了一层最小的面向对象语法
OC完全兼容C语言语言
可以在OC代码中混入C语言代码,甚至是C++代码
可以使用OC开发Mac OS X平台和iOS平台的应用程序
2.设计类
类名:Zombies
属性:life,颜色,位置,形状
行为:走,咬,死,loseLife
炮弹
类名:Cannonball
属性:大小,威力,飞行距离,速度
行为:飞,爆炸
车
类名:Car
属性:载员,速度,牌照
行为:跑,停
学生
类名:Student
属性:姓名、学号,性别
行为:学习,逃学
手机:
类名:Phone
属性:大小,尺寸,颜色,_cup,内存
行为:打电话,发短信
BOOL OC提供的一种Boolean类型,就是用来表示逻辑上真与假这个类型
BOOL 在OC中有两个取值 YES 和 NO
YES 真 对应数字 1
NO 假 对应数字 0
使用BOOL可以提高代码可读性,减少代码的出错率
所有数据类型都可以定义变量
所有的数据类型都可以作为形参或实参
所有数据类型类都可以作为返回值
1、对象做方法参数传递是地址传递
2、对象可以在方法中进行连续的传递
3、对象可以作为方法的返回值
Objective-C是一种面向对象的计算机语言,Brad J Cox 1980s 设计了Objective-C,
该语言是基于SmallTalk-80。1988 NeXT 发布了Objective-C,它的开发环境和类库叫
“NEXTSTEP”,1994年NeXT与Sun发布了标准的NEXTSTEP系统,取 名“OPENSTEP”,
软件自由基金会OPENSTEP版本叫GNUStep。
1996 苹果公司开始支持NeXT,把NEXTSTEP/OPENSTEP用于 Mac OS X操作系统开发,
它的版本和开发环境叫Cocoa,使用 Objective-C作为基础语言,开发工具Xcode和Interface Builder。
2007 苹果公司推出Objective-C 2.0,Objective-C是Mac OS X和 iOS开发的基础语言
特点:
OC不是一门全新的语言
C语言的基础上增加了一层最小的面向对象语法
OC完全兼容C语言语言
可以在OC代码中混入C语言代码,甚至是C++代码
可以使用OC开发Mac OS X平台和iOS平台的应用程序
2.设计类
类名:Zombies
属性:life,颜色,位置,形状
行为:走,咬,死,loseLife
炮弹
类名:Cannonball
属性:大小,威力,飞行距离,速度
行为:飞,爆炸
车
类名:Car
属性:载员,速度,牌照
行为:跑,停
学生
类名:Student
属性:姓名、学号,性别
行为:学习,逃学
手机:
类名:Phone
属性:大小,尺寸,颜色,_cup,内存
行为:打电话,发短信
3.NSString类的简介
#import <Foundation/Foundation.h>#import <string.h>int main(int argc, const char * argv[]) { // NSString 对象的创建 // 1、通过字面量创建 NSString *str = @"天气冷了,注意身体!"; NSLog(@"%@",str);// 2、通过对象方法// NSString *str1 = [NSString new]; NSString *str1 = [NSString alloc];// str1 = [str1 init]; str1 = [str1 initWithUTF8String:"大家要努力学习啊!"]; NSLog(@"%@",str1);// 3、通过类方法创建对象// 类方法它是隶属于类的,它是通过“类名”调用// 此处的格式化字符串与NSLog中的格式化字符串是一样的 NSString *str2 = [NSString stringWithFormat:@"今天股票有跌%d个点!", 10]; NSLog(@"%@",str2); // 4、NSString 对象中表示长度函数// command + 鼠标左键点击进去// length 计算的是字符串中有几个字符 long len = [str length]; NSLog(@"%ld",len); char *strc = "天气冷了,注意身体!";// strlen计算字符串所占用的字节数,在UTF8编码中一个中文占用3个字节 len = strlen(strc); NSLog(@"%ld",len); len = [@"abc你好" length]; NSLog(@"%ld",len); return 0;}4.BOOL类型
BOOL OC提供的一种Boolean类型,就是用来表示逻辑上真与假这个类型
BOOL 在OC中有两个取值 YES 和 NO
YES 真 对应数字 1
NO 假 对应数字 0
使用BOOL可以提高代码可读性,减少代码的出错率
所有数据类型都可以定义变量
所有的数据类型都可以作为形参或实参
所有数据类型类都可以作为返回值
#import <Foundation/Foundation.h>void testBool(BOOL flag){ if (flag) { NSLog(@"真"); }else{ NSLog(@"假"); }}@interface CZLogin : NSObject- (BOOL) vilidateUserName:(NSString *)userName andPassword:(NSString *) password;@end@implementation CZLogin- (BOOL)vilidateUserName:(NSString *)userName andPassword:(NSString *)password{// 当对象进行==比较时候,比较是它们所指向的是不是同一个地址// 验证用户名不能为空// nil 空对象 if (userName == nil || [userName isEqualTo:@""]) { NSLog(@"用户名不能为空"); return NO; } if (password == nil || [password isEqualTo:@""]) { NSLog(@"密码不能为空"); return NO; } if ([userName isEqualTo:@"大木"] && [password isEqualTo:@"123"]) { return YES; } return NO;}@endint main(int argc, const char * argv[]) { CZLogin *login = [CZLogin new]; BOOL canLogin = [login vilidateUserName:@"大木" andPassword:@""]; if (canLogin) { NSLog(@"可以登录!"); }else{ NSLog(@"登录失败!"); } BOOL isTrue = YES; testBool(YES); testBool(NO); // 找出10~100中可以被7整除的最小的数 // for(int i = 10;i < 100;i++)// {// BOOL isDivisible = (i % 7 == 0);// if (isDivisible) {// NSLog(@"%d",i);// break;// }// } return 0;}5.对象与方法
1、对象做方法参数传递是地址传递
2、对象可以在方法中进行连续的传递
3、对象可以作为方法的返回值
#import <Foundation/Foundation.h>/* 定义狗类 类名 CZDog 属性 _name 行为 biteOtherDog */@interface CZDog : NSObject{@public NSString *_name;}- (void) biteOtherDog:(CZDog *) other;@end@implementation CZDog- (void) biteOtherDog:(CZDog *) other{ NSLog(@"%@ 咬了 %@ 一口",_name,other->_name);}@end/* Person类 changeDog orderDog: biteOtherDog: */@interface CZPerson : NSObject//用于改变狗名字- (void) changeDog:(CZDog *) dog;/** * 指使一个狗去咬另外一个狗 * * @param dog 去咬的那个狗 * @param other 被咬那只狗 */- (void) orderDog:(CZDog *) dog biteOtherDog:(CZDog *) other;@end@implementation CZPerson//对象作为方法参数- (CZDog *) sellDog{ return [CZDog new];}//用于改变狗名字- (void) changeDog:(CZDog *) dog{ dog->_name = @"大黄";}/** * 指使一个狗去咬另外一个狗 * * @param dog 去咬的那个狗 * @param other 被咬那只狗 */- (void) orderDog:(CZDog *) dog biteOtherDog:(CZDog *) other{// 让去这只狗去咬另外一只狗 [dog biteOtherDog:other];}@endint main(int argc, const char * argv[]) { CZDog *dog = [CZDog new]; dog->_name = @"旺财"; CZDog *other = [CZDog new]; other->_name = @"小黑"; CZPerson *person = [CZPerson new]; [person changeDog:dog]; NSLog(@"%@",dog->_name);// 对象作为方法参数的连续传递 [person orderDog:dog biteOtherDog:other]; CZDog *newDog = [person sellDog]; newDog->_name = @"小狗!"; NSLog(@"%@",newDog->_name); return 0;}
6.封装:
1、类是数据与功能的封装,数据就是成员变量,功能就类方法或对象方法
2、对数据的封装
如果我们把属性设置为@public那么,这个属性外部就可以任意的修改,我们就失去管理这个属性的权利
1、当你把属性暴露在外部的时候,那么你就是失去对它的管理,一旦这个属性被多个人用的时候,如果再像管理这个属性就变得非常麻烦,这个类的可维护性就变得很差
2、怎么对数据进行封装
1、为每一个属性提供getter 和 setter方法
2、setter方法:又称为写方法,赋值给对象赋值
1、必须是对象方法
2、它没有返回值
3、名字 set + 属性名称去掉下划线,首字母大写
4、必须提供一个参数,参数类型必须与所对象的成员变量的类型一致
3、getter方法:又称为读方法,赋值读取属性的值
1、必须是对象方法
2、必须要返回值,并且返回值类型要与成员变量类型一致
3、方法名必须是成员变量去掉下划线
4、一定是空参的
3在对象方法中访问成员变量的时候,其中隐藏一个指针
当方法中如果没有与成员变量名称相同变量,编译器在编译会自动给它加上一个self指针
如果有与成员变量同名的局部变量,那么这个名字就是一个局部变量,编译器就不会再给他加上self指针了
#import <Foundation/Foundation.h>#import "CZCat.h"/** 设计车类,提供getter和setter方法 1> 车 (1)属性 * 轮子数 * 速度 (2)方法 * 属性相应的setter和getter方法 */@interface CZCar : NSObject{ int _wheels;//车轮数‘ double _speed;//速度}//_wheels setter- (void) setWheels:(int) wheels;- (int) wheels;- (void) setSpeed:(double) speed;- (double) speed;@end@implementation CZCar//_wheels setter- (void) setWheels:(int) wheels{ _wheels = wheels;}- (int) wheels{ return _wheels;}- (void) setSpeed:(double) speed{ _speed = speed;}- (double) speed{ return _speed;}@endint main(int argc, const char * argv[]) { CZCat *cat = [CZCat new]; [cat setAge:100]; [cat setName:@"小黑"]; NSLog(@"age = %d,name = %@",[cat age],[cat name]); return 0;}
0 0
- ios学习之旅---oc面向对象的特点
- OC面向对象的三大特点
- IOS学习之OC面向对象—封装
- IOS学习之OC面向对象—继承
- IOS学习之OC面向对象—多态
- OC基础语法学习2:面向对象中的特点
- ios学习之旅--oc对象的关系
- IOS之OC面向对象—封装
- IOS之OC面向对象—继承
- IOS之OC面向对象—多态
- 【IOS 开发学习总结-OC-18】★★objective-c面向对象之——OC的包装类与对象处理
- 【IOS 开发学习总结-OC-15】objective-c面向对象之——对象初始化
- 【IOS 开发学习总结-OC-16】★★objective-c面向对象之——类的继承
- 面向对象的特点
- 面向对象的特点
- 面向对象的特点
- 面向对象的特点
- 面向对象的特点
- oc Block / NSComparisonResult排序 / 字面量
- 【LeetCode】(242)Valid Anagram(Easy)
- 【洛谷】P1089 津津的储蓄计划
- windows编程之进程通信:内存共享
- js 不同页面间传递值并取值
- ios学习之旅---oc面向对象的特点
- cmd下使用命令制作U盘启动盘
- iOS 网络开发NSURLConnection——使用block回调方法发送异步请求
- css实现手风琴图片特效
- 一起talk C栗子吧(第四十回:C语言实例--遍历二叉树)
- POJ-2121 Inglish-Number Translator-数字英译汉
- oc NSDate / Category类目 / 延展
- GitHub 如何删除仓库(repository)
- fork函数创建进程