黑马程序员————第二十天

原创 2015年07月08日 11:45:51

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

点特性

左侧stu.age=10;<=>[stu setAge:10];

int a=p.age;点语法出现在等号右侧将page替换为[p.age];


验证文件是否copy进

点击项目->BuildPhases->Compile Source


OC点语法本质为方法调用必须要有set get方法


@property编译器指令

告诉编译器声明属性的访问器(getter/setter)方法


@property  类型名 方法名(为get方法名)

写在声明@interface@end内


@property声明的实例变量为私有变量只在类中使用


@synthesize

在.m文件中定义set,get方法的实现


@synthesize age;

@synthsize name;与@property连用默认生成了两个变量,age,name

必须@property先声明


@synthesize  age=_age,weight=_weight //将实例变量与属性关联不再使用默认生成变量


Xcode4.4以后可只使用@property自动生成下划线实例变量(私有变量)


编译时报错  不符合语法

运行时报错 代码区不存在



如果父类没有子类相同名的方法需要强制转换 


NSObject *obj=[Animals new];

[(Animal *)obj run];


ios5后推出instancetype类型 与id类型不同点:

instance可返回和方法所在类型相同类型的对象 id只能返回未知类型对象

相同点就是都能作为返回值


动态绑定

在OC中 对象能否调用指定的方法  不是由编译器决定而是由运行时决定的

被称作方法的动态绑定



在OC中对象不调用方法而是接受消息 源代码中消息也称为选择器

消息表达式为[reciver  message]


首先通过第一个参数reciver找到它的_isa指针,然后在_isa指向的class对象中使用第二个参数selector查找方法

如果没有找到就用当前class对象中的新_isa指针到上一级的父类的class对象中查找

当找到方法后,再依据reciver的self指针找到当前对象调用当前对象的具体实现的方法(IMP)然后传递参数调用实现方法

若一直到NSObject的Class对象也没有,则会报错。



内省 对象在运行时获取其类型的能力


1.判断类型

-(Bool) isKindOfClass:classObj判断实例对象是否为这个类或其子类实例

Bool b= animal isKindOfClass:[Animal class];

-(Bool) isMemberOfClass:classObj 判断实例对象是否为这个类实例

-(Bool) isSubClassOfClass:classObj 判断实例对象是否为其子类实例



2.判断对象能否响应指定的方法

-(Bool)respondsToSelector:selector

SEL s1=@selector(run);

Bool b=[dog respondsToSelector:s1];

判断类有无此方法

-(Bool)instanceRespondToSelector:selector

[Dog instanceRespondToSelector:s1];




响应方法

1.通过performselector响应无参方法

SEL s1=@selector(run);

[ani performselector:s1]

2.通过performselector:withObject:响应有参方法

SEL s1=@selector(eat:);//因为有一个参数所以eat后有冒号

[ani performselector:s1withObject:@"香蕉"];

3.通过performselector:withObject:withObject:响应两个参数

[ani performselector:s1withObject:@"香蕉"withObject:@"苹果"];



构造方法

1.alloc分配空间  此时内存已经清零

2.init初始化

3.返回值为对象地址


init就是构造方法  是对象方法减号开头


@implementation  Person

-(instancetype)init{

self=[super init];// 作用:防止文件类的初始化方法释放(release)掉self指向的空间并重新alloc了一块空间

[super init]可能失败表示父类初始化失败   super指代父类的对象

if(self)

{

-age=10;

}

return self;

}


自定义构造方法

1.一定为对象方法减号开头

2.返回值为instancetype类型

3.方法名为initWith开头
















黑马程序员- 第二十天(文件)

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 一,File类 ·是用来将文件或者文件...
  • u011898643
  • u011898643
  • 2014年03月14日 22:17
  • 409

黑马程序员--- 学习笔记(第二十天)

File类 用于文件夹或文件封装成对象 方便对文件与文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 File f1=new File("a.txt"); 将a....
  • u012422158
  • u012422158
  • 2014年04月14日 15:34
  • 535

第二十天

@class 用在两个类交叉去声明的时候,只是声明类,如果用到类中的方法,就要去用#import来导入头文件。 id类型---相当于void*, 通用的指针类型,可以指向任意对象。本身就是指针类型,所...
  • ZHANG_FD
  • ZHANG_FD
  • 2015年11月16日 09:13
  • 156

黑马程序员--IOS基础第二十天(OC)

 1、 OC中的点语法 点语法: 对象名.成员变量名 (点语法不是访问成员变量,而是方法的调用) 它是一个编译器特性 点语法作用:可以替换传统的get和set方法的调用 点语...
  • dushoupeng
  • dushoupeng
  • 2015年07月15日 11:07
  • 113

黑马程序员--第二十天:io流的第三天

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------   /*20-1_4 Fil...
  • F781492604
  • F781492604
  • 2013年06月13日 22:23
  • 285

【黑马程序员】IO流(二) 第二十天

-------  android培训、java培训、java学习型技术博客、期待与您交流! ---------- 知识点 01)BufferWriter /* * BufferWr...
  • yi_remember
  • yi_remember
  • 2013年03月30日 20:50
  • 486

编程第二十天

布局管理器BorderLayout的使用方法 import javax.swing.*; import java.awt.*; public class BorderLayout...
  • ImEzreal
  • ImEzreal
  • 2017年05月26日 12:43
  • 65

实训第二十天

今天是实训的第二十天,本来以为今天是要配置tomcat服务器的,结果发现,课件里根本没有提到,所以今天就不写了(有需要的可以私聊我)。 今天上午我们跟着老师简单学习了一下java的数据类型,运算...
  • qq_37985965
  • qq_37985965
  • 2018年01月04日 16:09
  • 8

第二十天总结

今天是超时的一天,阿席八TLE到死,CCPC好难那,大佬一半时间都AK了,求求你们别做了,就A了一道题,我的感受是,什么都不如暴力,我怎么什么算法都想不起来,啊啊啊啊啊。题解没有看到,我到时候一定要看...
  • TimEckel
  • TimEckel
  • 2017年08月19日 17:13
  • 104

第二十天网络编程

网络编程和网页编程:(1)计算机与计算机之间的数据传送(2)基于网页 要素(1)ip地址:由八位2进制的数组成,一共四组,转为十进制0~255(2)ip分类:A:第一位网络位(1-126),后三位是机...
  • qq_25596603
  • qq_25596603
  • 2017年07月24日 21:44
  • 90
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员————第二十天
举报原因:
原因补充:

(最多只允许输入30个字)