oc语言学习之基础知识点介绍(一):OC介绍
一、第一个OC程序
#import <Foundation/Foundation.h> //导入头文件
int main(int argc, const char * argv[]) { //main函数
    @autoreleasepool {//自动释放池,我们现在写代码最好都写这里面
        NSLog(@"Hello, World!"); //输出语句
    }
    return ; //退出程序,返回一个值给系统看
}
二、OC中的字符串
/*
前缀的概念:(了解一下)
提供框架的作者很多,所以方法名或者可能重复,推荐官方的框架用2个字母开头,第三方的用三个。 c语言中没有字符串这个类型,只能用char类型的指针或者数组。无论如何,C语言都没有专门为字符串创建一个类型。 OC中的字符串类型:
NSString类型
它就是OC中的字符串类型! NSString类型也是 NSString *str = @"哈哈哈"; OC中字符串是:@"字符串" 都是以@符号开头的 @"字符串"方便我们区分是OC字符串 OC字符串类型不能赋值为C语言字符串 NSString *str = "哈哈哈";
*/ #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"哈哈哈";
NSLog(@"Hello, World!");
}
return ;
}
三、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 <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool { NSLog(@"%@",@"dsadsa¥"); }
return ;
}
四、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 <Foundation/Foundation.h>
typedef struct {
    char str[];
    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 ;
}
五、面向对象、类和对象的概念
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 <Foundation/Foundation.h> @interface Teacher:NSObject{ @public NSString *_name; //姓名 int _age; //年龄 BOOL _gender; //性别,YES-男 NO-女 NSString *_subject; //学科 int _salary; //工资
} //行为
-(void)teaching; @end @implementation Teacher -(void)teaching{ NSLog(@"开始让你们涨姿势");
} @end int main(int argc, const char * argv[]) {
@autoreleasepool { //这就是Teacher类的对象
Teacher *tea= [Teacher new]; tea->_age = ; tea->_name = @"哈哈哈"; tea->_gender = YES; tea->_salary = ; tea->_subject = @"学科"; NSLog(@"姓名:%@ 年龄:%d",tea->_name,tea->_age); }
return ;
}
4、方法的几种用法
1)、无参无返回值
/* 一个类的三要素:
类名、属性、行为(方法) 代码里面写的方法,其实就是对某一个类进行行为的描述。 方法的定义:
-(void)方法名; 方法的实现:
-(void)方法名{
方法体;
} 方法它本质上就是函数,方法很多的用法跟函数一样。 函数分为无参无返回值的函数、有参无返回值的函数、有参有返回值的函数、无参有返回值的函数,方法也分这几种。 无参无返回值的函数:
void 函数名(); 方法的: -(void)方法名; 调用:
函数用法:
函数名(); 方法用法:
[对象名 方法名]; 注意:1.方法的声明只能写在@interface和@end之间(不包括大括号里面)
2.方法的实现只能写在@implementation和@end之间
*/ #import <Foundation/Foundation.h> @interface Person : NSObject{
@public //不加public外面调用不了
NSString *_name;
int _age;
}
-(void)run; @end @implementation Person -(void)run{
NSLog(@"打印了哟");
}
@end int main(int argc, const char * argv[]) {
@autoreleasepool {
//调用方法之前一定要new一个对象
Person *p = [Person new];
[p run];//对象名 方法名
}
return ;
}
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 <Foundation/Foundation.h>
@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 ;
}
3)、 有返回值
/*
有返回值方法的定义:
-(返回值类型)方法名:参数列表;
例: -(int)sayAge; 实现:
-(返回值类型)方法名:参数列表{
方法体;
return 值;
} -(int)sayAge{
return 16;
} 方法的返回值跟函数一样,你可以接收,也可以不接收,反正它都会执行 */ #import <Foundation/Foundation.h> @interface Person : NSObject{ @public
NSString *_name;
int _age;
} -(int)sayAge; @end @implementation Person -(int)sayAge{ return ;
} @end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
// int age = [p sayAge];
// NSLog(@"%d",age);
NSLog(@"%d",[p sayAge]);
}
return ;
}
5、方法中操作属性
/*
 在方法里面可以给属性赋值或者取值。
 方法里面可以给属性赋值和取值
    语法:
        取值:
            属性名;
        赋值:
            属性名 = 值;
*/
#import <Foundation/Foundation.h>
@interface Person: NSObject{
    @public
    NSString *_name;
    int _age;
}
/**
 *  打招呼方法
 */
-(void)sayHi;
@end
@implementation Person
-(void)sayHi{
    _age = ; //改动的是同一个对象
    //直接在方法里面使用属性名就能访问到
    NSLog(@"我叫%@,今年%d岁",_name,_age);
}
@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p = [Person new];
        p->_name = @"李刚";
        p->_age = ;
        [p sayHi];//54岁
        NSLog(@"age=%d",p->_age);//
    }
    return ;
}
6、new关键字做的三件事
/* nil代表空,也就是数字0
new关键字做了三件事: 1.开辟堆空间 2.初始化对象(初始化里面的属性,默认初始化为0) 3.返回堆空间的地址 只要遇到调用了new方法都会开辟堆空间,换句话说就是一个新的对象。 */
oc语言学习之基础知识点介绍(一):OC介绍的更多相关文章
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
		一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ... 
- oc语言学习之基础知识点介绍(五):OC进阶
		一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点 ... 
- oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍
		一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ... 
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
		一.类方法的使用 /* 像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法. 之前学的方法调用的语法: [对象名 方法名]; //对象方法 类方法: ... 
- c语言学习之基础知识点介绍(三):scanf函数
		本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ... 
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
		上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ... 
- c语言学习之基础知识点介绍(七):循环结构
		本节主要介绍循环结构 一.while循环 /* 语法: while(表达式){ //循环体; } 注意:循环变量.循环条件和循环控制语句三者缺一不可. 例如: */ ; //循环变量 ){ //循环条 ... 
- c语言学习之基础知识点介绍(四):算术运算符和逗号表达式
		本节主要介绍c语言中运算符. 运算符主要分为四类: 1.算术运算符 加(+),减(-),乘(*),除(/),取余(%,两数相除,得到余数) 2.关系运算符 3.逻辑运算符 4.换位运算符 下面将依次介 ... 
- c语言学习之基础知识点介绍(一):输出语句和变量简单介绍
		本系列是为了学习ios做准备的,也能作为c语言入门的教程看看. c语言的程序结构: 1.顺序结构:自上而下依次执行. 2.分支结构:程序有选择的执行某段代码或者不执行某段代码. 3.循环结构:程序循环 ... 
随机推荐
- HDU-4639 Hehe 简单DP
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4639 简单递推题,呵呵,不多说... //STATUS:C++_AC_15MS_272KB #incl ... 
- 使用Mono Cecil 动态获取运行时数据 (Atribute形式 进行注入 用于写Log) [此文报考 xxx is declared in another module and needs to be imported的解决方法]-摘自网络
			目录 一:普通写法 二:注入定义 三:Weave函数 四:参数构造 五:业务编写 六:注入调用 7. 怎么调用别的程序集的方法示例 8. [is declared in another module ... 
- maven 本地仓库的设置
			设置方式一: 安装好maven后,在maven安装目录的conf文件夹下有一个settings.xml文件,该文件就是用来配置maven的一些常用参数 %MAVEN% / conf / setting ... 
- JavaAPI之Runtime类以及bat文件开启应用程序
			package OtherToolsClass; import java.io.IOException; public class RuntimeDemo { /** * @param args */ ... 
- [iOS基础控件 - 5.4] 广告分页代码(UIScrollView制作)
			A.概念 例子就是桌面的APP列表,当APP数量超过一个屏幕,自动进行分页 B.实现思路 1.创建一个UIScrollView,这里设置为宽度跟屏幕相同,高度1/4屏幕高度左右 2.使用代码在UI ... 
- UIKit: UIResponder(转自南峰子博客)
			有问题可以加本人QQ:564702640(验证:博客园) 我们的App与用户进行交互,基本上是依赖于各种各样的事件.例如,用户点击界面上的按钮,我们需要触发一个按钮点击事件,并进行相应的处理,以给用户 ... 
- 如何获得网页上的swf视频教程文件?
			网上有很多免费的视频教程,但有的视频教程这能在线观看,无法离线下在,如何获得网页上的swf视频教程文件呢? 我问以"我要自学网"的视频教程为例进行讲解.这是一个我要自学网的PS视频 ... 
- RC522天线匹配参数【worldsing笔记】
			图为Device读卡器的参数值 EMC电路对读写距离影响不大: L3 和L4 固定为2.2uH: C11和C12也是固定值,如果P ... 
- android系统自带图标集合(android.R.drawable查看)
			alert_dark_frame alert_light_frame arrow_down_float arrow_up_float bottom_bar btn_default btn_defaul ... 
- 设计模式之十三:适配器模式(Adapter)
			适配器模式: 将一个类的接口转换成另外一个期望的类的接口.适配器同意接口互不兼容的类一起工作. Convert the interface of a class into another interf ... 
