OC

1. NSString前面NS是NextSTEP的缩写.

2.面向对象编程OOP (ObjectOrientedProgramming)

3.接口在程序里叫数据接口

在网络里叫网络接口

4.成员可见度定义:

@public大家的

@product受保护的

@private私有的

5.接口部分标志@interface@end一对

6.所有@的符号都是OC对C语言扩展的东西

7.

-(void)sayHi; -号代表实例方法.void是返回值类型.

+类方法.

8.

-号方法必须由实例对象来调用,+号方法必须由类来直接调用

9.NSLog=printfNSLog是C语言的函数

10.NSLog(@“sdfsdfsdf”);@后面叫字符串对象. %@替换对象的(替换进去的肯定是文字信息)

112015-01-22 16:32:33.758 HelloOC[618:303]HELLO, WORLD

618是进程号,303线程号

12.

类名大写开头

方法名和变量小写开头

13 #import导入oc基础库

14具有相同特征和行为的事物的抽象.类的定义

15所有的类都放在了全局区

alloc是把在全局去里的成员变量拷贝到堆里面一份

alloc所有的成员变量都有初值

16 void *p无类型指针

17id是typedefvoid *id叫泛型指针id可以保存任何类型的指针.

17不能简单的改变2个变量的值,而作用域约束

如果想在外部去修改2个局部变量的值,必须拿到地址.

18->指向标示符

19父类:总类子类:分类的概念.而不是父亲和儿子的概念(不是具体的实物)!

20给对象声明空间的时候就赋初值

Person.h中:

@interface Person :NSObject

{

@public//如果下面没给值,系统会自动初始化.

NSString *_name;

NSString *_gender;

NSString *_hobby;

NSString *_hobby1;

int _age;

}

- (id)init1;

@end

Person.m中:

- (id)init1

{

_age = 18;

_name = @"HAHAHA";

return self;

}

main.m中:

Person *p =[[Person alloc] init1];

[p eat];

可见度是约束(标示符)的访问权限,指的是标示符符号的访问权.

21

@public子类可见,外部也可见

@protected子类可见,外部不可见

@private子类不可见(不允许访问),外部类不可见

子类可以继承父类的private后的属性,但是不能访问.

private不光要保护内部数据的安全,也要保护外部能安全的使用.

22.在当前类中不允许方法名重复,在别的类可以定义一个跟这个方法同名的方法.

-(id)initWithName:(NSString *)name;init开头是对创建对象和初始化的,不要随便写类名字开头.如果init不是初始化的方法,Xcode会拒绝编译.

初始化方法init只能调用一次.不能重复调用

- (void)setName:(NSString*)name setGender:(NSString *)gender

{

_name = name;

_gender = gender;

}

但是不能同时get2个属性例如:

- (NSString*)getName: (NSString *)getGender

{

return self;

}这样是错误的

如果不小心修改了Xcode的系统文件.

找到错误提示路径,删除里面所有东西,之后再Xcode中Product中选择clean然后在重新编译.

不能在main里面用super因为main类没有父类.

对super发消息就是一个途径,指向的从父类继承的方法.

构造器用来创建对象的

重点:指派构造designated

initializer指派初始化方法.

(某个方法里面有super init那么这个方法就是指派构造化方法.(也是初始化入口)(也叫默认指派初始化方法)

类里面必须得有这么唯一一个指派初始化方法的入口

-(id)initWithName:(NSString *)name

sex:(NSString *)sex

hobby:(NSString *)hobby

{

//self = [super init];

//if (self) {

//_name = name;

//_sex = sex;

//_hobby = hobby;

//}

//return self;

self = [self initWithName:name sex:sexhobby:hobby age:0];

return self;

}

指派初始化方法:

- (id)init

{

//self = [super init];

////如果self是有效指针(非空)

//if (self) {

//_name = @"小唐";

//_sex = @"男";

//_age = 40;

//}

self = [self initWithName:nil sex:nilhobby:nil age:0];

return self;

}

- (id)initWithName:(NSString*)name

{

self = [self initWithName:name sex:nil];

return self;

}

-(id)initWithName:(NSString *)name

sex:(NSString *)sex

{

self = [self initWithName:name sex:sexhobby:nil];

return self;

}

- (id)initWithName:(NSString*)name

sex:(NSString *)sex

hobby:(NSString *)hobby

{

self = [self initWithName:name sex:sexhobby:hobby age:0];

return self;

}

-(id)initWithName:(NSString *)name

sex:(NSString *)sex

hobby:(NSString *)hobby

age:(NSInteger)age

{

self = [super init];

if (self) {

_name = name;

_sex = sex;

_hobby = hobby;

_age = age;

}

return self;

}

dealloc(销毁)不允许手动调用,系统自动调用

MRC manual

reference count手动引用计数

ARCauto reference count系统自动扫描添加释放内存.

-release()是引用计数器减1

-autorelease()自动释放池.

-retain(引用,不会产生新的对象)对这个对象发送这个消息,引用计数器+1

[sturetainCount]输出引用计数器的值

怎么把Xcode改成MRC

左键项目,然后搜matic找到objective-c

automatic reference counting改成no

alloc和retain的数量要等于release

便利构造器:

+

(id)personWithName:(NSString *)name//+开头,类名开头,返回的是id就是便利构造器

{

Person *person = [[Person alloc]initWithName:name];

return [person autorelease];

}

autorelease自动释放池,什么时候释放,是由系统控制的

//为什么释放之后还是能打出来1:

Person *per = [PersonpersonWithName:@"小唐"];

NSLog(@"%lu",[per retainCount]);

[per release];

NSLog(@"%lu",[perretainCount]);//这个是野指针,虽然对象被释放了,但是内存那块没被覆盖,所以才能打出来1.

系统为了做优化,所以当retainCount为1的时候直接销毁,不用再去—了.

- (void)release

{

if (1== self.retainCount) {

[self dealloc];

}

else {

self.retainCount--;

}

}

autorelease引用计数器延迟减1

成员变量是随着对象消亡而消亡对象的消亡是在dealloc中,每个成员变量要在dealloc这释放.

栈里面的东西是随着函数的退出而消亡

当指针变量声明周期结束前要release

settergetter方法,和便利构造器补全.

父对象要保证子对象在父对象的生命周期是安全的

比如myclass是父对象(_student这个指针指向的那个student就是子对象),里面有个Student*student这个student是子对象.(因为student是个指针也是个对象)

如何保证父对象里的子对象安全,对子对象retain.

为什么不能手动写dealloc因为可能还有别人在用,释放了的话就crash了

在.h中容易产生交叉导入,容易产生符号找不着的问题.

而真正的头文件要在.m中导入.

父对象一定会强引用自己的子对象.(强引用,就是对引用计数器+1)

self是内部指向这个类的指针,stu是外部的指针

atomic(原子)原子化效率低,安全

一个类可以写在不同的原文件中.(类目)

只能添加方法,不能添加成员变量.

@interface NSString(SayHi)给NSString添加一个SayHi

方法.

当两个对象都同时要使用同一个字符串的时候,这个字符串类型要用NSMutableString

指针类型的作用:

1.做算术运算跳数的大小

2.间接寻址指向的类型.

NSString *p方便编译器去检查错误(为什么加指针符号

如果想让类目访问成员变量,必须在主类里显示声明.

isEqualToString比较两个字符串对象是否相等\

怎么把数字转换成字符串.

OC的数组会对每一个加进去的对象,引用计数器都会+1,然后释放的时候,会自动减1.

//其实自动释放池里就有一个数组

self只能初始化才能赋值,以后就不能变了.

字典存取不是连续的,是散列的,根据key所计算的下表(哈希算法)

字典以空指针结束.所以不能存空指针

//71 72 74

//26 27 30 313237

(集合)set无序集合.直接给一个对象,自动算hash.(当你需要知道一个对象是否在集合中) (集合和数组和对象不同,不能存重复对象)

假设hash重复了,就顺延往下存,第二种就是往上跳10个.

第三种,做小集合,如果在这个小集合找到重复的了,就去另一个小集合找.

netsh winsock reset

super只能帮我们找到这个类从父类继承过来的方法.

指针声明周期结束之前要对它relase

局部变量在消亡时释放?

成员变量在函数return时释放?

id是泛型指针,(可以保存任意类型的指针)

添加到数组中得元素都会retain

遍历构造器的好处:

1.工厂方法,工厂生产

2.我们不用关系它的释放,因为返回回来的就是临时对象!

加完断点之后,在lldb中输入po province打印这个对象.

子对象强引用父对象,形成内存空洞.都互相对对方引用计数器+ 1

嵌套引用(2个对象无法释放)

类目

不能增加成员变量.(如果在类目中添加属性,只有方法,没有对应的成员变量).(类目不能访问属性创建的成员变量)

分类管理类

写在不同的原文件中

额外添加相应方法

时间戳(1970年开始计算秒数):因为1970年Unix

NSDate存得的是标准时间,没有时差.

//NSTimeZone *zone = [NSTimeZonetimeZoneWithName:@"America/Swift_Current"];

//[nmatter setTimeZone:zone];

//NSDate *sDate = [nmatterdateFromString:dateString];

//NSLog(@"%@", sDate);

OC的类目是为了防止java的过度继承

OC中写入延展是对类内部开放的,不让外面类访问(也就是java中得私有方法.)

有效的封装不只是保证内部安全,还保障外部安全.

接口是对外服务的菜单

私有API方法是在延展里的,没有在.h中声明的

协议里的可选方法,(首先要确定这个方法实现了)

一个类可以遵守多个协议(协议是可以继承的)

代理指针为什么用assign,不允许用retain为了防止父对象做子对象的代理时候,产生的循环应用.

(延展):把外面不需要的功能,放在类里面(高内聚)

(协议):每个类单独管理,而不是两个类互相有联系(低耦合)

//alloc, copy, init产生的对象不需要释放.(这3个单词不能做字头)

浅拷贝:父对象是同一个,子对象是不同的

深拷贝:父对象和子对象是不同的2对

父类指针指向了子类对象(多态) (目的:写通用代码);

setter和getter里面写得先得判断传进来是不是以前的.

block就是一段代码段,(访问得用指针访问) block就是一个对象,可以retain和copy

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

推荐阅读更多精彩内容

  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,709评论 0 4
  • 前言:面试笔试都是必考语法知识点。请认真复习和深入研究OC。 目录:iOS-面试题-OC基础篇 (1) - (84...
    麦穗0615阅读 4,245评论 0 33
  • 一、类和对象 1.定义:类是具有相同特征和行为的事物的抽象,对象是类的具体化,类是对象的类型。 2.面向对象的三大...
    陈亮宇阅读 370评论 1 6
  • 没觉得世界辜负我或是我与世界太格格不入。却也觉得其实活的不好,如果曾经不是这样的呢。活了太长我都做了什么。 只记得...
    我姓李1798阅读 198评论 0 1
  • 已经不记得是什么时候开始,每天都写一段文字了,但最早的初衷我还记得,是罗胖(罗振宇)讲的,大概是这么个意思:要想更...
    终身学习的昊天阅读 378评论 0 0