OC-基础

一、oc介绍

1、简介

oc是一个成熟的,面向对象的语言

oc是基于c之上的,扩展的c

oc是从Smalltalk【1】得到对象的方法及语法。所有的非面向对象的操作(包括原始变量,预处理,表达式,函数声明和函数调用)的语法和c语言相同,而面向对象的特性的语法是Smalltalk的消息机制。

2、调试器

调试时编程的最有创造性和治理挑战的方面之一,他也是最费力的方面之一。由于调试是一个困难但却关键的任务,所以重要的是要学习调试的技巧。这些技巧中最重要的是让计算机向您展示它在做什么,这是debugging的关键。

NSLog打印函数:

    例:NSLog(@"The current date and time is:%@",[NSDate date]);

格式控制符

例:

(1) int intValue = -100;    NSInteger intValue2 = -999;

NSLog(@"int:%d,%d",intValue,intValue2);//int -100 -999

注:NSInteger is int type, not class!是基本数据类型的typedef,不是类。平台不同,NSIntger对于的类型也不同。跨平台,可移植性

(2)unsigned int uintValue = 100; unsigned int uintValue2 = -100;

NSLog(@"unsigned int : %u %u",uintValue,uintValue2);//unsigned int:100 4294967196

(3)char aChar = 'G';  char bChar = 0x61;  unichar aUnichar = Ox4f60;//unichar,两个字节

NSLog(@"char:%c %c,unichar:%C",aChar,bChar,aUnichar);//char:G a, unichar:你);

(4)const unichar pUnichar[] = {L'你',L'好',0x0000};

NSLog(@"C string(unichar):%S",pUnichar);//

【1】Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。它是一种面向对象的程序设计语言;一种程序设计环境;一个应用开发环境(ADE)

3、C的扩展

在Objective-C中只要看到@符号,都可以把它看成是C语言的扩展

    Foundation框架处理的是用户界面之下的层中的特性,例如数据结构和通信机制。             Foundation框架的头文件占用了近1MB的磁盘存储空间,包含一万四千多行代码,涵盖一百多个文件。使用#import<Foundation/Foundation.h>包含主头文件,就能够获得整个集合。也许你认为辛苦地读取每个文件的全部文本会耗去编译器很多时间,但是Xcode非常聪明:他会使用预编译头文件(一种经过压缩的、摘要形式的头文件),在通过#import导入这种文件时,加载速度会非常快。

     Cocoa对其所有函数、常量和类型名称都添加了‘NS’前缀。这个前缀告诉你函数来自Cocoa而不是其他工具包。【NS前缀->NeXTSoftware】。

让xcode总是将警报作为错误来处理的方法

3.1布尔类型

Object-C的BOOL类型比C语言的bool类型早诞生十多年。这两种布尔类型可以在同一个程 序中共存,但在编写Cocoa代码时要使用BOOL。(说明:oc中的BOOL实际上是一种对带符号的字符类型的定义,它使用8位存储空间。YES定义为1,而NO定义为0。oc并不将BOOL作为仅能保存YES或NO值的真正的布尔类型来处理。编译器奖BOOL认做8位二进制数,YES和NO值只是一种约定。这引发一个小问题:如果不小心将一个长于1字节的整型值(例如short或int值)赋给一个BOOL变量,那么只有低位数字节会用作BOOL值。假设该地位字节刚好为0【例如8960,写成十六进制为0x2300】,BOOL值将会是0,即NO值。

二、面向对象编程基础知识(OOP面向对象编程-Object-Oriented Programming)

1、类

oc定义了一个根类:NSObject,每一个新的类,应该是一个NSObject类的子类。它提供了一个系统运行时的大量方法。也就是说,每一个对象的类型都是NSObject,每一个指针指向对象的指针都可以被声明为NSObject*。事实上,我们可以使用id这个类型来代替。这就是一个生命对象或指针的简单方法,并且支持动态类型检查来代替静态类型检查。

(1) 方法声明:

mType (returnType) name1:(type1)param1 name2:(type2)param2...

方法需要参数时,方法名后要有冒号;冒号前面是标签,冒号后面是参数类型和参数名

+类方法(C++静态成员函数),用类名调用;

-实例方法(C++非静态成员函数),用对象名调用

static int sum = 5;//静态全局变量

注:OC不支持静态成员变量,通过静态全局变量来实现静态成员变量功能

(2)类的实现

2、

@interface部分,它用于定义类的公共接口。

@implemention部分,使对象真正起作用的代码位于@implementation部分中

注:Objective-C中不存在真正的私有方法,也无法把某个方法标示为私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用。

实例化对象时,需要分配内存,然后这些内存被初始化并保存一些有用的默认值,这些值不同于你在获得新分配的内存时得到的随机值。内存分配和初始化完成后,就创建了一个新的对象实例。

三、继承

说明:不要直接更改由继承得到的实例变量的值。一定要使用方法来更改他们。

    某些语言(例如C++)具有多继承特性,在这种情况下,一个类可以直接冲两个或多个类继承而来。但Objective-C不支持多继承,如果你尝试在Objective-C中使用多继承(多继承的形式可能类似于以下语句),编译器将不能识别他们:@interface Circle:NSObject,PrintableObject;你可以通过OC的其他特性获取多继承的优点,例如分类和协议。

    因为继承在子类和超类之间建立了一种"is a"(是一个)关系,所以NSObject的实例变量称为isa。使用更具体种类的对象代替一般类型,这种能力称为多态性

    每个方法调用都获得了一个名为self的隐藏参数,它是一个指向接收消息的对象的指针。方法实用self参数查找它们要使用的实例变量。

    OC提供某种方式来重写方法,并且仍然调用超类的实现方式。当需要超类实现自身的功能,同时在前面货后面执行某些额外的工作时,这种机制非常有用。为了调用继承方法的实现,需要使用super作为方法调用的目标。

super既不是参数也不是实例变量,而是由OC编译器提供的某种神奇功能。向super发送消息时,实际上是在请求OC向该类的超类发消息。如果超类中没有定义该消息,OC将按照通常的方式在继承链中继续查找对应的消息。

四、复合

1、什么是复合

    编程中的复合就好像音乐中的作曲一样:将多个组件组合在一起配合使用,从而得到完整的作品。创作乐曲时,作曲人可能会选择低音管声部组成交响乐的二声部。在OC中,复合是通过包含作为实例变量的对象指针实现的。严格地讲,只有对象间的组合才能叫复合。

2、存取方法

    存取方法是用来读取或改变对象特定属性的方法。存取方法:setter方法,getter方法

    说明:get这个词在Cocoa中有着特殊的含义。如果get出现在cocoa的方法名称中,就意味着这个方法会通过你当做参数传入的指针来返回数值。例如,NSData(cocoa中的类,创建可存储任意字节序列的对象)中又一个getBytes:方法,它的参数就是用来存储字节的内存缓冲区的地址。

    复合建立的是“has a”的(有一个)关系。

五、源文件组织

@class创建了一个前向引用。就是在告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些。”如果有循环依赖关系,@class也很有用。即A类使用B类,B类也使用A类。如果试图通过#import语句让这两个类互相引用,那么最后就会出现编译错误。但是如果在A.h中使用@class B,在B.h中使用@class A,那么这两个类就可以相互引用了。

    如果它们是继承自其他类而不是通过指针指向其他类,则不能在头文件中使用@class语句。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容