ios-关于OC的初步学习

目录

类 对象

继承 多态 方法

NSSTring NSValue NSNumber

集合

内存管理

属性

设计模式 引用传值

类目 延展 协议

begain

1

一个对象永远不会保存另外一个对象(保存指针)

面向对象编程语言的特点:封装,继承,多态

NextSTEP = cocoa

@class Hero 1.预先申明,避免交叉引用 2.代替#import ,不需要 导入头文件重新编译

@class #import #include的区别 ?????????

OC 数据:typedef类型(NSInteger(= int long),CGFloat(= float,double),NSPoint( = struct _NSPoint)) 和对象类型(NSString(!= char *),NSNumber)

nextStep, cocoa的由来:oc开始火爆的原因和时间:

面向对象:封装(隐藏内部实现,稳定外部接口,封装就是定义类,定义属性,定义方法),继承(子类可以复用父类所有方法的申明和实现,非私有的实例变量以及协议,继承具有单根性和传递性,继承就是代码优化公共部分交给父lei),多态(不同对象对同一消息的不同响应,子类可以重写父lei的方法,多态就是允许方法重名,参数或返回值可以使父类型传入或者返回,description,init)

OC 具有静态语言的特性,又有动态语言的效率

动态类型(id类型):在编译时不能识别,只有运行时才可

动态绑定(@select / SEL):oc中无函数概念只有消息机制,跳过编译,运行时才动态的添加函数调用,在运行时才决定调用什么方法,需要传模式参数进去,要实现他就定义一个SEL整数(方法的ID)遍历绑定一个方法来引用(函数调用是根据函数名字符串来查找,速度比根据整数查找慢)

动态加载:动态的加载资源,

@的作用:关键字起始符

init初始化

dealloc 属性减一 |release 对象计数减一

传值方式:单例,NSUserdefault,属性,KVO,KVC,通知(NSNoticationCenter)

类簇(class cluster,抽象工厂类,提供抽象接口,具体实现由内部类实现)类:NSString,NSNumber,NSDictinary,NSArray

----------------------------

类目:系统的类不可以添加属性,其他可以,但是要自己写setter getter方法,一般都可添加方法

延展:不可见

协议:

-----------------------------

私有成员变量:其他类访问不到

属性:整个工程都可见

------------------------------

clang llvm( Low Level Virtual Machine )龙书

Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

设计模式:KVO KVC 单例 代理模式

2.OC 与 C 与 C++的不同点:

OC:面向对象,动态的封闭语言,单继承(有protocols和categories),smalltalk学派(更灵活,允许出错),c的超集(可兼容C的全部语法)

C++: 面向对象,静态的封闭语言,多继承,simula 67学派(更安全,不灵活),兼容C的大部分语法

C :面向过程,开源语言

3.import :防止重复引用头文件

4.int main(int argc, const char * argv[] char **env) : 首先是一个计算提供的参数到程序, 第二个是对字符串数组的指针。

argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数

argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数

argv[0] 指向程序运行的全路径名或者程序名字 argv[1] 指向在DOS命令行中执行程序名后的第一个字符串 argv[2] 指向执行程序名后的第二个字符串 ... argv[argc]为NULL

**env:字符串数组。env[ ]的每一个元素都包含ENVVAR=value形式的字符 串。其中ENVVAR为环境变量,value 为ENVVAR的对应值。 argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。

5.@ 关键字起始符号

6.框架是一组类的集合,而这些类互相关联,cocoa Touch是一组框架的集合

7.面向对象的回调机制:

委托:单个委托对象可以接收针对某个特定对象的全部事件消息,对象只 能向其委托对象发送一组特定协议所申明的消息

凡是支持委托的对象,其背后都有一个相应的协议,申明可以向该委托对象发送的消息,为其感兴趣的事件实现相应的方法;

如果某个类实现了某个协议中的方法,则该类遵守该协议

目标动作对:当某个特定事件发生时,发生的事件的一方会向指定的目标对象发送一个之前设定好的动作消息,针对不同事件(请按),需要创建不同的目标动作对。

8.协议不是类,是一组特定的方法,不能为协议创建实例,或添加实例变量,协议自身不实现方法,需要由遵循相应协议的类实现

用于委托的协议成为委托协议,不是所有协议都是委托协议

delegate 特性:_unsafeunretained(防止retain循环)

9.构建阶段:编译源代码(预处理,编译),连接二进制文件和库,拷贝程序资源

预处理:处理#语句(import / define),预处理为中间文件.ml文件

编译:将中间文件转换为机器码,不过也保存在中间文件中---编译时错误,为语法错误

连接:设置链接,指向被链接的文件(框架是类的集合,其实现文件已编译,是目标文件,为库)---连接器错误,无法处理链接,找不到文件或者

10.getter setter 用于保护变量不被外界访问(默认为peotected属性,不能被外界访问,设置为public则容易被攻击,因为大家都可以访问)的时候,公开这两个方法(方法默认为public)即可以通过这个方法访问成员变量

11.protected private public ????????????? 作用域 当前类 同一package 子孙类 其他package

public  √      √              √      √

protected √    √              √      ×

friendly  √    √              ×      ×

private  √        ×              ×      ×

12.oc中调用方法时,不看指针看对象,称为虚方法

13.

(1).3种类型集合:数组NSarray 字典 NSDictionary(无序) 集NSSet(无序,哈希算法,内存不连续,只能一次取一个或者全部取出,不可重复,如有重复自动清除)

(2).集合中都只能是对象,这个对象是数组

(3).集合中不能存放Nil对象,nil是集合结束符标识

(4). ios5 (不可变): 字符串:@"",id:@()  ,NSArray :@[], NADictionary: @{} char[] @encode()


14.内存:程序运行时临时分配的存储空间,在程序结束后释放

(1).继承自NSObject的对象才需要进行内存管理

(2).对象的生命周期:初始化,使用,释放

(3).@property:

Retain:对对象release旧值,retain新值(适用于OC对象类型)

Assign:直接赋值(默认,适用于非oc对象类型]

Copy:release旧值,copy新值

(4)Autorelease注意:

1)系统自带的方法中,如果不包含alloc new copy等,则这些方法返回的对象都是autorelease的,如[NSDate  date];

2)开发中经常会写一些类方法来快速创建一个autorelease对象,创建对象时不要直接使用类名,而是使用self

(5).ARC准则:无强指针,则释放,

(6).通过便利构造创建的对象不需要进行release操作

15.KVC运用了一个isa-swizzling技术。

isa-swizzling就是类型混合指针机制。KVC主要通过isa-swizzling,来实现其内部查找定位的。

isa指针,就是is a kind of的意思,指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的方法的指针,和其它数据。 KVC在调用方法setValue的时候

(1)首先根据方法名找到运行方法的时候所需要的环境参数。

(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。

(3)再直接查找得来的具体的方法实现。

这样的话前面介绍的KVO实现就好理解了

当一个对象注册了一个观察者,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。

所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。

这样只有当我们调用KVC去访问key值的时候KVO才会起作用。所以肯定确定的是,KVO是基于KVC实现的。

正则表达式

1.验证用户名和密码:"^[a-zA-Z]\w{5,15}$"

2.验证电话号码:"^(\d{3,4}-)\d{7,8}$"

3.验证手机号码: "^1[3|4|5|7|8][0,9]\d{8}$"

4.验证Email地址:(“^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$”)

5.只能输入整数或者小数:^[0-9]+([.]{0,1}[0-9]+){0,1}$

6.只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”。

7.匹配双字节字符(包括汉字在内):[^\x00-\xff](计算字符串长度,一个双字节字符长度记2 ASCii字符记1)

8.匹配空白行的正则表达式:\n\s\r(删除空白行)

9.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$(表单验证时很实用)

10.\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。

x .== 判断内存地址 基本变量 对于一些基本类型 可以使用==来判断,但对于指针类型,使用==则判断的是指针保存的内容地址是否相等,而不是判断内存地址下的内容是否相等(应该通过方法来判断)

y. 静态方法返回的对象一般都不需要手动释放内存

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,692评论 0 9
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,135评论 30 470
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 4,971评论 0 13
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,293评论 0 6
  • 本文为林炎小宝原创,转载请联系 人机大战, 水哥输了 星期五晚上,最强大脑人机大战第三轮,代表人类出战的水哥(不知...
    林炎小宝阅读 1,514评论 14 11