博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc语言学习之基础知识点介绍(一):OC介绍
阅读量:5958 次
发布时间:2019-06-19

本文共 8645 字,大约阅读时间需要 28 分钟。

 

一、第一个OC程序

#import 
//导入头文件int main(int argc, const char * argv[]) { //main函数 @autoreleasepool {
//自动释放池,我们现在写代码最好都写这里面 NSLog(@"Hello, World!"); //输出语句 } return 0; //退出程序,返回一个值给系统看}

二、OC中的字符串

/* 前缀的概念:(了解一下) 提供框架的作者很多,所以方法名或者可能重复,推荐官方的框架用2个字母开头,第三方的用三个。 c语言中没有字符串这个类型,只能用char类型的指针或者数组。无论如何,C语言都没有专门为字符串创建一个类型。OC中的字符串类型: NSString类型    它就是OC中的字符串类型! NSString类型也是     NSString *str = @"哈哈哈";  OC中字符串是:@"字符串"         都是以@符号开头的  @"字符串"方便我们区分是OC字符串  OC字符串类型不能赋值为C语言字符串         NSString *str = "哈哈哈";*/#import 
int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"哈哈哈"; NSLog(@"Hello, World!"); } return 0;}

三、NSLog

/*  NSLog:        输出一句话  printf("格式化控制符",值列表);  NSLog,也可以加格式化控制符!  C语言格式化控制符 %d:输出int类型 %f:输出float类型 %c:输出char类型 %s:输出C语言字符串 %ld:输出long类型 %lu:输出unsigned long类型 …………:  NSLog完全可以输出以上的格式化控制符。  还增加了  %@:输出对象类型!(OC中的字符串也是一个对象),注意不能输出C语言字符串。  NSLog与printf的区别:    换行区别:        NSLog自带换行。        printf没有自带换行,必须手动加\n。     内容区别:        NSLog默认打印出项目名字和打印的时间。        printf木有。     输出内容区别:        NSLog可以输出%@(NSLog可以输出C语言中的所有格式化控制符,但是自己还新增了一些)。        printf不可以输出%@    注意:        NSLog可以打印%s,可以!但是有条件!不能打印包含带有中文(中文符号也不行)的C语言字符串。*/#import 
int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"%@",@"dsadsa¥"); } return 0;}

四、OC和C的比较

/*  C和OC的对比:     文件对比:                   C    OC            头文件:.h   .h            源文件:.c   .m            目标文件:.o  .o     数据类型:            C:基本类型、数组、结构体、枚举等等             OC:除了C语言的类型外,还有自己的类型,NSString                换句话说,OC有C语言的所有类型 int double 数组 结构体 在OC中也统统能用。            还增加了BOOL类型,YES  Or NO,也有,true Or false。但是推荐                    用YES  Or   NO,             C语言中怎么表示真和假?0为假,非0为真。    变量常量:简而言之也是C语言中的变量和常量的概念在OC中通用     分支语句:             C和OC中的分支语句完全,也就是说if和switch语句都能在OC中用     循环语句:            OC中可以用C所有的循环语句(while,do-while,for)             但是OC还多了一种增强型的for语句     函数:        OC中完全可以用函数,概念一样,OC中多了方法的概念    结构体、指针、枚举:            统统都可以用在OC中     OC增加了类的类型,和类的对象  总结:OC中可以用所有C语言中的东西,只不过又新增了一些自己的东西 */#import 
typedef struct { char str[50]; int age;}Person;int main(int argc, const char * argv[]) { @autoreleasepool { //OC中的数组 NSArray *arr = @[ @"老周",@"真的",@"very帅" ]; //C语言的for// for (int i =0; i<3;i++ ) {// // NSLog(@"%@",arr[i]);// } //OC中增强型的for for (NSString* str in arr) { NSLog(@"%@",str); } } return 0;}

五、面向对象、类和对象的概念

    1、面向对象

/*        面向对象只是一种解决问题的思维而已。        面向对象只是一种思维方式的改变,而并不是语法的创新。        一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。        通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。        面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。*/

    2、类和对象

/*对象:        对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象的状态和行为:        对象具有状态,一个对象用数据值来描述它的状态。        对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。        对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中[2] 类:        具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。        类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。        类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。类的结构:        在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。①一般--具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。②整体--部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。⑸消息和方法。对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体。*/

    3、代码实现

/*    声明类的语法:                 @interface 类名 : NSObject{                    @public                    属性列表                }                 行为列表                 @end     注意:@end不可省略,否则报错!                暂时一定要加一个@public 行为在代码里面又叫方法     语法:-(void)方法名; 注意:还要加@implementation 类名 + @end  否则要报错     语法:        @implementation 类名         方法的实现列表         @end  注意:1.类名每个单词首字母都要大写      2.属性以_开头,属性又叫成员变量      3.@implementation 和@end一定不能少  用代表表示对象:         语法:            类名 *对象名 = [类名 new];             对象名->属性名 = 值;             还有一种方法 (*对象名).属性名 = 值;  (不推荐用)*/#import 
@interface Teacher:NSObject{ @public NSString *_name; //姓名 int _age; //年龄 BOOL _gender; //性别,YES-男 NO-女 NSString *_subject; //学科 int _salary; //工资}//行为-(void)teaching;@end@implementation Teacher-(void)teaching{ NSLog(@"开始让你们涨姿势");}@endint main(int argc, const char * argv[]) { @autoreleasepool { //这就是Teacher类的对象 Teacher *tea= [Teacher new]; tea->_age = 16; tea->_name = @"哈哈哈"; tea->_gender = YES; tea->_salary = 1; tea->_subject = @"学科"; NSLog(@"姓名:%@ 年龄:%d",tea->_name,tea->_age); } return 0;}

    4、方法的几种用法

          1)、无参无返回值

/*  一个类的三要素:        类名、属性、行为(方法) 代码里面写的方法,其实就是对某一个类进行行为的描述。  方法的定义:        -(void)方法名;  方法的实现:        -(void)方法名{            方法体;        }方法它本质上就是函数,方法很多的用法跟函数一样。 函数分为无参无返回值的函数、有参无返回值的函数、有参有返回值的函数、无参有返回值的函数,方法也分这几种。  无参无返回值的函数:        void  函数名(); 方法的: -(void)方法名;调用:    函数用法:         函数名();    方法用法:         [对象名 方法名];  注意:1.方法的声明只能写在@interface和@end之间(不包括大括号里面)       2.方法的实现只能写在@implementation和@end之间*/#import 
@interface Person : NSObject{ @public //不加public外面调用不了 NSString *_name; int _age;}-(void)run;@end@implementation Person-(void)run{ NSLog(@"打印了哟");}@endint main(int argc, const char * argv[]) { @autoreleasepool { //调用方法之前一定要new一个对象 Person *p = [Person new]; [p run];//对象名 方法名 } return 0;}

          2)、 有参无返回值

/*  一个参数的情况:     定义:            -(void)方法名:(参数类型)参数名;     实现:            -(void)方法名:(参数类型)参数名{                 方法体;            }     调用:            [对象名  方法名:实参值];    注意:如果有参数的话,冒号也属于方法名。  两个参数的情况:        定义:                -(void)方法名:(参数类型)参数名 :(参数类型)参数名2;        注意:1、有空格!             2、为了增强方法的可读性,一般在后面的参数里面,还会写一些方法的名(必须加)。              例: -(void)方法名1:(参数类型)参数名 方法名2:(参数类型)参数名2;        实现:                -(void)方法名:(参数类型)参数名 :(参数类型)参数名2{                    方法体;                }         调用:            [对象名  方法:参数1 :参数2];   N个参数的情况:             -(void)方法名:(参数类型)参数名1 方法名2:(参数类型)参数名2 方法名3:(参数类型)参数名3 方法名n:(参数类型)参数名n; 注意:方法名是包含冒号的! */#import 
@interface Person : NSObject{ NSString *_name; int age;}/** * 方法名:watchMovie:andFood: * */-(void)watchMovie:(NSString *)movie andFood:(NSString *)food;-(void)watchMovie:(NSString *)movie :(NSString *)food;/** * 方法名是eat: 形参名是:food */-(void)eat:(NSString *)food;@end@implementation Person//方法的实现-(void)eat:(NSString *)food{ NSLog(@"吃%@",food);}-(void)watchMovie:(NSString *)movie andFood:(NSString *)food{ NSLog(@"看《%@》,吃着%@",movie,food);}@end//方法名:rangeOfCharacterFromSet:options:int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; // NSString *food = @"汉堡包";// // [p eat:food]; //传递变量 [p eat:@"汉堡包"]; //可以直接给值 [p watchMovie:@"咒怨" :@"瓜子" ]; [p watchMovie:@"咒怨" andFood:@"瓜子" ]; } return 0;}

          3)、 有返回值

/* 有返回值方法的定义:        -(返回值类型)方法名:参数列表;       例: -(int)sayAge; 实现:        -(返回值类型)方法名:参数列表{            方法体;            return 值;        }        -(int)sayAge{            return 16;        } 方法的返回值跟函数一样,你可以接收,也可以不接收,反正它都会执行 */#import 
@interface Person : NSObject{ @public NSString *_name; int _age;}-(int)sayAge;@end@implementation Person-(int)sayAge{ return 16;}@endint main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; // int age = [p sayAge];// NSLog(@"%d",age); NSLog(@"%d",[p sayAge]); } return 0;}

    5、方法中操作属性 

/*  在方法里面可以给属性赋值或者取值。  方法里面可以给属性赋值和取值     语法:        取值:            属性名;         赋值:            属性名 = 值;*/#import 
@interface Person: NSObject{ @public NSString *_name; int _age;}/** * 打招呼方法 */-(void)sayHi;@end@implementation Person-(void)sayHi{ _age = 54; //改动的是同一个对象 //直接在方法里面使用属性名就能访问到 NSLog(@"我叫%@,今年%d岁",_name,_age);}@endint main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; p->_name = @"李刚"; p->_age = 44; [p sayHi];//54岁 NSLog(@"age=%d",p->_age);//54 } return 0;}

      6、new关键字做的三件事

/*  nil代表空,也就是数字0 new关键字做了三件事:     1.开辟堆空间     2.初始化对象(初始化里面的属性,默认初始化为0)     3.返回堆空间的地址  只要遇到调用了new方法都会开辟堆空间,换句话说就是一个新的对象。 */

 

转载于:https://www.cnblogs.com/bobo-pcb/p/4969318.html

你可能感兴趣的文章
在同一页面显示多个JavaScript统计图表
查看>>
Mac电脑Tomcat下载及安装(详细)MAC在Eclipse里配置tomcat
查看>>
多线程之-----------定时器
查看>>
C#语法——反射,架构师的入门基础。
查看>>
Beego Models 之 一
查看>>
SpringBoot+MyBatis开发环境搭建并实现登录权限过滤
查看>>
bond网络
查看>>
json学习笔记
查看>>
mysql硬件优化
查看>>
简单的yum配置
查看>>
NFS故障解决
查看>>
代码上线
查看>>
"error: command 'x86_64-linux-gnu-gcc' failed with
查看>>
CentOS7环境下部署Mariadb-Galera集群
查看>>
Oracle使用dump转储数据块
查看>>
STP、RSTP、PVST&PVST+、MSTP
查看>>
ESXi删除最后的快照
查看>>
OPT_PARAM Hint
查看>>
Debian 使用 iptables-persistent 持久化 iptables 规则
查看>>
SATA硬盘分区设置与安装详解
查看>>