Objective-C基础知识

//————————————OC的发展历程—————————————//

1980年,OC语言诞生。

1988年,OC语言库诞生。

1996年,OC语言成为苹果公司专用编程语言。

2004年,Mac OS X以“NS”为前缀(Mac OS X使用以UNIX为基础的操作系统)

2007年,苹果公司发布了OC2.0版本。

//————————————OC的特点—————————————//

兼容性:在OC的代码中可以有C++和C语句,它可以调用C的函数,也可以通过C++对象访问方法。

字符串:通常情况下,OC使用Foundation框架的NSString类型的字符串。

类:定义类是OC的基本功能,OC的类声明和实现包括两个部分:接口部分和实现部分。

属性:属性是OC2.0提出的概念,它是替代对成员变量访问的“读取方法(getter)”和“设定方法(setter)”的手段。

分类:可以通过分类扩展父类的功能。

//————————————OC的编程思想——面向对象编程—————————————//

1.面向对象的三个基本特征:封装、继承和多态。

封装就是把客观事物封装成抽象的类。

继承就是从一般到特殊的过程。

多态提供了同一个接口名称,通过覆盖和重载实现不同的功能。

**********************

接口文件和实现文件

1.OC是一个面向对象的语言,所以整个OC程序是由一些类组成的。每个OC类包含两大块代码,分别叫“接口”和“实现”。

***********************

类和实例

1.就像现实世界中的对象一样,在面向对象编程的世界中,每一个对象都属于一个类型,这个类型称为类。类定义了现实世界中的一些事物的抽象特点。在OC中,定义一个类的一般格式如下:

@interface Member : NSObject

{

NSString *name;

int age;

}

- (NSString *)name;

- (int)age;

- (void)setName:(NSString *)input;

- (void)setAge:(int)input;

@end

2.每个类的实例就是一个对象,例如:member就是Member类的对象:

Member *member = [[Member alloc]init];

类是对象的模型,对象是类的一个实例。类是一种逻辑结构,而对象是真正存在的物理实体。

3.面向对象的分析过程大致分为:划分对象->抽象对象->将类组织成层次结构(通过继承来完成)。

4.面向对象的程序设计就是使用类和实例进行设计与实现程序。

5.UIButton *button = [[UIButton alloc] init];

在数据类型的右边有一个星号,所有的OC对象变量都是指针类型的。

等号右边的语句是创建一个对象,这是一个嵌套的方法调用。第一个调用的是UIButton的alloc方法,这是一个相对比较底层的调用,因为该方法其实是为UIButton变量申请一个内存空间。第二个调用的是新创建对象的init方法,这个init方法是初始化变量值。

**********************

消息和方法

1.在面向对象中,直接发给对象的一个命令称为“消息”,而被调用的代码称为方法。给一个对象发送一个消息和调用一个对象的方法基本上同一回事。

2.方法的定义

在OC中,一个方法是类的一部分。一个方法的声明格式为:

+或者- (返回类型)方法名:(参数类型)参数名;

它包含三个方面:

它是一个类方法还是一个实例方法?

它的参数和返回值

方法的名字。

3.类方法和实例方法

3.1。类方法和实例方法是通过方法定义的“+”或“-”来区分的。

3.2.类方法一般用于两个目的:

工厂方法:它是给类分配实例的方法。例如,UIFont类有一个类方法fontWithName:Size:。你提供一个名字和一个字体大小,这个UIFont类就返回一个UIFont实例。

全局公用方法:一个类方法也可以是一个公用方法,这些公用方法可以被任何其他类来调用,而且不需要实例化。例如:UIFont类的familyNames方法返回机器上所安装的字体信息。

4.调用方法

4.1.在OC中,对象的属性变量属于对象的内部数据,通常需要访问这些数据只能通过对象的方法来实现,方法是作用于属性的函数。

4.2.在OC中,把“调用一个函数”称为“向一个对象发送一个消息”,或者称为”调用方法“。调用方法的简单格式是(假设没有输入参数):

[实例 方法];

或者是:[类名 方法];

4.3.一个方法也可以返回值,可以把返回的值放在变量上保存,例如:变量=[实例 方法];

4.4.在OC上,调用一个类或实例的方法,也称为给这个类或实例发消息。类或实例称为“接收方”。所以,调用方法的格式也可理解为:[接收方 消息];

4.5.在术语上,整个表达式也叫做消息表达式。例如:

NSString *s2 = [s uppercaseString];//发送消息“uppercaseString”到s

4.6.如果一个消息是一个带有参数的方法(即在调用一个方法时,可能需要提供输入参数),那么,每一个参数值跟在一个冒号后面。调用格式为:

[接收方 名字1:参数1 名字2:参数2 名字3:参数3 …];

在术语上,方法的名称是”名字1:名字2:名字3…”.

4.7.OC允许在一个方法中调用中嵌套另一个方法,如:

[NSString stringWithFormat:[test fromat]];

但是尽量避免在一行代码里面嵌套调用两个方法。因为这样的话,代码的可读性不好。

4.8.self类似于Java的this,使用self可以调用本类中的方法。

***************************

实例变量

1.实例变量属于一个对象。

2.从OC2.0开始,可以使用“.”来调用一个实例变量。如:aFraction.numerator。

**************************

创建实例的三种方法

1.间接创建实例

如:NSString *s = [s2 uppercaseString];

2.直接创建实例

发送一个alloc方法给一个类,从而直接创建这个类的实例。alloc类方法是在NSObject类上实现的,NSObject类是根类,其他类都从它这里继承。在执行alloc之后,系统就为一个实例分配内存。

3.通过nib文件创建和初始化实例

****************************

对象声明的语法:

类名 *var1, *var2,……….

但是要注意,这只是定义了一个指针变量,尚未为它所包含的数据获得内存空间。在调用alloc方法之后,这些对象才获得(分配)空间。例如:

Member *member;

member = [Member alloc];

在术语上,上述例子中的member称为Member对象,或者称为Member类的一个实例。另外,除了分配空间外,还需要调用init方法来给这个对象设置初值。

***************************

==:比较的是指针,而不是指向指针的内容。

self:这段代码中正在起作用的实例。

//——————————————————OC注释—————————————————//

段(块)注释:“/…/”

行注释:“//”

内容分段:#pragma mark

其实,其中的注释根本不用加,因为它都是英语组成的,通过阅读就可看懂它的意思。

在Xcode中,使用以下方式可以将OC源代码分割成不同的代码块。

#pragma mark - 注释内容

//——————————————————OC的文件扩展名—————————————————//

.h:头文件(也称为接口文件)。头文件包含类、类型、函数和常数的声明。

.m:源代码文件。可以包含oc和C代码。

.mm:源代码文件。带有这种扩展名的源代码文件,除了可以包含OC和C代码外,还可以包含C++代码。仅在你的OC代码中确实需要使用C++类或者特性的时候才有这种扩展名。

//——————————————————OC的导入文件—————————————————//

1.使用#import包含头文件

在C/C++中,为了防止头文件重复包含,我们经常需要用如下代码定义.h文件

#ifndef _MYSOMETHING_H

#define _MYSOMETHING_H

。。。

#endif

OC提供了一个预编译指令#import来简化#include的做法,使用#import,就不用在每个头文件里定义上面的3行条件编译语句。

当然,在OC中,还可以使用#include包含.h文件,但是,很显然,使用#import更方便。

2.导入文件

在.h文件中导入其他的类,使用@class指令。

在.m文件中导入其他的类,使用#import指令。

时间: 2024-11-02 17:01:46

Objective-C基础知识的相关文章

Deep Reinforcement Learning 基础知识(DQN方面)

Introduction 深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算法.简单的说,就是和人类一样,输入感知信息比如视觉,然后通过深度神经网络,直接输出动作,中间没有hand-crafted工作.深度增强学习具备使机器人实现完全自主的学习一种甚至多种技能的潜力. 虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端是DeepMind在NIPS 201

Deep learning:一(基础知识_1)

前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下machine learning的基础知识,见网页:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning.内容其实很短,每小节就那么几分钟,且讲得非常棒. 教程中的一些术语: Model repr

转载 Deep learning:一(基础知识_1)

前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下machine learning的基础知识,见网页:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning.内容其实很短,每小节就那么几分钟,且讲得非常棒. 教程中的一些术语: Model repr

IOS-OC的基础知识

IOS学习之路--OC的基础知识 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c

第二章 面试需要的基础知识

2.1 面试官谈基础知识 基础很重要 算法.复杂的 编程能力 数据结构 2.2 编程语言 程序员写代码总是基于某一种编程语言,因此技术面试的时候直接或者间接都会涉及至少一种编程语言.在面试的过程中,面试官要么直接问语言的语法,要么让应聘者用-~种编程语言写代码解决一个问题,通过写出的代码来判断应聘者对他使用的语言的掌握程度.现在流行的编程语言很多,不同公司开发用的语言也不尽相同.做底层开发比如经常写驱动的人更习惯用C, Linux下有很多程序员用C++开发应用程序,基于Windows的C#项目已

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

BroadcastReceive基础知识总结

BroadcastReceive基础知识总结 1.BroadcastReceive简介 BroadcastReceive也就是"广播接收者"的意思,顾名思义,就是用来接收来自系统和应用中的广播 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能,当网络状态改变时,系统会产生一条广播,接收到这条广播,就能及时的做出提示和保存数据等操作,当电池的电量改变的时候,系统会产生一条广播,接收到这条广播就能在电量低的时候告知用户

基础知识--:before伪元素和:after伪元素

http://book.51cto.com/art/201108/285688.htm 3.7  替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before伪元素和:after伪元素是为源文档中不存在的内容设置样式的. 没有内容怎么设置样式呢?别急!它们有一个content属性,一起使用就可以为某个选择器前.后的内容设置样式了. 下面就来了解一下:before伪元素和:after伪元素的用法. 视频教学:光盘/视频/3/3.7  替换指定位置.avi 

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永