OC 的核心方法总结

核心语法

一、 点语法

p.age不是访问的成员变量,而这就是oc中的点语法,点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开相应的方法。切记点语法的本质是转换成相应的set和get方法。

(在OC中访问成员变量的方法只有一种,“->”作为访问成员变量的方法)

点语法使用注意:

a)    Self.age= age; return self.age;这两种情况下会引发死循环!

b)   如果没有set和get方法,则不能使用点语法。

二、 成员变量的作用域:

a)      @private:只能在当前类的实现@implementation中直接访问

b)     @protected :可以在当前类以及子咧的实现@implementation中直接访问

c)      @public:任何地方都可以直接访问;

d)     @package:同一个“体系内”(框架)可以访问,介于@private跟@public之间

注意:

a)    当父类中声明的变量为@private变量在子类中只能通过set和get方法访问变量

b)   当在声明中没有特别支持类的类型则默认的类的类型为@protected类型

c)    在实现中也可以声明成员变量,但写的成员变量只默认为私有的,不会出现其他类型,即使你写成别的类型,也只能为私有的类型,子类是无法访问的,在.m中的成员变量中不能存在与@interface中同名的成员变量!

d)   写类的声明是为了保证类的完整性,但是不写声明直接在.m中写方法的实现也是可以的。当在main.m中直接写的实现.m中就可以直接定义成员变量类型

三、 @property 和@synthsize和id

@property可以自动生成某个成员变量的set和get方法的声明

@synthsize可以自动生成某个成员变量的set和get方法的实现

例如:@sythsize age=_age;

@synthsize自动生成age的set跟get方法的实现,并且访问_age这个成员变量;

@property可以实现三步:

  1. 定义变量
  2. 实现方法
  3. 实现声明

注意这个是在xcode4.4版本之后才实现的!

@synthsize的细节:

1.@synthsize age = _age

  1. Set和get实现中会访问成员变量_age;
  2. 如果成员变量_age不存在,就会自动生成一个@private的成员变量_age;

2. @synthsizeage;

  1. Set 和get实现中会访问成员变量age
  2. 如果成员变量age不存在,就会自动程程一个@private的成员变量age

3. 手动实现

  1. 若手动实现set方法,编译器就只会生成get方法
  2. 若手动实现get方法,编译器就只会生成set方法
  3. 若同时手动实现了set方法和get方法,编译器就不会自动生成不存在的成员变量

四、     id

id是指万能指针,能指向\操纵任何OC对象;

注意:写id的时间不要写*;

局限性:调用一个不存在的方法,编译器会马上报错!

例如:

Person *p = [Person new];

NSObject *o = [Person new];

Id d = [Person new];


五、 构造方法

完整的创建一个可用对象分为两步:

  1. 分配存储空间  +alloc
  2. 初始化  -init

New方法是创建一个对象的方法,[Person new]是一个类方法。

构造方法的用途是用来初始化对象的方法,是一个以“-”开头的对象方法(默认初始化完了之后的值都是0)

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

例题:

每个Person对象创建出来,它的age都是10.

重写init构造方法条件

1.  一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性。

Self = [super init];//当前对象   self

2. 如果对象初始化成功,才有必要进行下来的初始化

If(self!=nil)

{

   //初始化成功

   _age = 10;

}

3.     然会初始化的数值

Return self;

以上代码简化后:

              -(id)init

{

       If(self = [super init])

{

       _age=10;

}

Returnself;

}

重写构造方法的注意点:

a)         先调用父类的构造方法([superinit]

b)        在进行子类内部成员变量的初始化

自定义构造方法:

1)        命名规范

a)       一定是对象方法,一定以-”开头

b)      返回值一般是id类型

c)       方法名一般以init开头

2)        自定义构造方法的用途:初始化值

a)       当父类中的成员变量存在的时间我们仅仅需要直接将需要初始化的值直接传到父类中初始化即可

b)      父类的属***给父类方法处理,子类仅需要处理自己的属性即可


六、   类别\分类Category


给某一个类扩充一些方法(不修改原来类的代码);

//声明

@interface 类名(分类名称)

@end

//实现

@implementation 类名(分类名称)

@end

分类的作用:

在不改变原来类内容的基础上,可以增加一些方法

使用注意:

1. 分类只能增加方法,不能增加成员变量!

2. 分类方法实现中可以访问原来类中声明的成员变量

3. 分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法失效没法继续使用

4. 方法调用的优先级:分类à原来的类à父类

类库:很多类的集合;

类的本身也是一个对象是一个class类型的对象,即是类对象;

七、 Load方法和initalize方法

Initialize方法可以看成类的初始化!

Load方法在程序加载使用时就被调用,当程序第一次加载使用时就调用initalize方法

1. 当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和类的+load方法。只会调用一次

2. 当第一次使用某个类的时间,就会调用当前类的+initialize方法

3. 先加载父类,在加载子类(先调用父类的load方法在调用子类的load方法)

先初始化父类,在初始化子类(先调用个父类的+initalize方法,在调用子类的+initalize方法)

Initialize方法可以起到监听的作用!可以知道这个类什么时间第一次被使用!

分类的load方法是在最后被加载的

Description方法:

+description()决定类对象的输出结果

-description()决定了实例对象输出的结果

地址:%p

__LINE__  ---------à行号  NSLog(@“%d”__LINE__);

__FILE__  ---------à文件  NSLog(@“%s”__FINLE__);

NSLog输出C语言字符串的时间不能有中文

__func__  ---------à方法  NSLog(@“%s”__Lfunc__);

八、 SEL方法


1. 方法的存储位置

a) 每个类的方法列表都储存在类对象中

b) 每个方法都有一个与之对应的sel类型的对象

c) 根据一个sel对象就可以找到方法的地址,进而调用方法

d) Sel类型的定义

typedef   struct  objc  selector   *SEL

2. SEL对象的创建

SEL  s = @selector(test);

SEL s2 =NSSelectorFromString(str);

SEL 其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法

其实消息就是SEL

时间: 2024-10-12 11:50:38

OC 的核心方法总结的相关文章

JS与OC中的方法相互调用

文章主要是介绍oc如何调用js 以及js的代码调用oc的方法 先上代码后做解释 //oc的.m 的代码 //ps接下来有js的代码一并解析,最后会附上demo //  ViewController.m //  JSAndOC // //  Created by dongqiangfei on 16/7/21. //  Copyright ? 2016年 dongqiangfei. All rights reserved. // #import "ViewController.h" #i

VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)

接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台. 这个问题纠缠了我好几天.这里把详细解决思路记下来.有同样问题的朋友可以少走很多弯路. 核心方法就一句话.“你项目使用的所有外部依赖库都用/MT编译.” 1.准备. 首先你要具备如下工具:CEGUI源码:FreeType源码:Pcre源码:CMake工具.我会在下文说明原因. 各个开源库的版本号,请参考你的CEGUI引用的各自的头文件分别下载. FreeType开源库主页:http://sourceforge.net/proje

jQuery编程中的一些核心方法简介

调用 jQuery 对象的方法很简单: $('h1').remove(); 大多数 jQuery 方法都是像上面这样被调用的,这些方法都位于 $.fn 命名空间内,这些方法称为 jQuery 对象方法. 但是也有一些方法不需要依赖于选择器的结果集,这些方法位于 jQuery 命名空间内,这些方法称为 jQuery 核心方法.如果觉得不好理解,记住下面两条即可: 所有 jQuery 选择器的方法都位于 $.fn 命名空间内. $ 内的方法一般都是一些实用的功能性方法,这些方法不依赖选择器,这些方法

SSH框架之Struts(3)——Struts的执行流程之核心方法

上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之后.不论哪种方式提交,都会进入到process核心方法中. ActionServelt doGet()和doPost()方法 public void <strong>doGet</strong>(HttpServletRequest request, HttpServletRespon

OC面向对象之方法

OC面向对象之方法 设计一个Caculator计算器类,它拥有计算的功能(行为) 1不带参数的方法 设计一个返回PI的方法 //方法声明 -(double)pi; //方法实现 -(double) pi { Return 3.1415926; } 方法声明 方法调用 2带一个参数的方法 设计一个计算平方的方法 //方法声明 -(double)square:(double)number; //方法实现 -(double)square:(double)number { Return number *

Hibernate4之session核心方法

在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态: 暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id. 特点:在使用代理主键的情况下, OID 通常为 null 不处于 Session 的缓存中 在数据库中没有相应的记录 持久化状态:我们能够理解成我们公司的正式在岗职工. 特点:OID 不为 null 位于 Session 缓存中 若在数据库中已经有和其相应的记录, 持久化对象和数据库中的相关记录相应 Session 在 flu

OC基础之方法和参数的命名规范

以前学过C/C++/Java/C#语言的童鞋可能刚开始对于OC的方法和参数的命名规范大为不爽 举例来说,如下一个OC方法: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 这个方法,如果在传统的C++编程语言中应该是: void tableViewCom

html 5 本地数据库(Web Sql Database)核心方法

Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome.Firefox.Opera等主流浏览器都已经支持Web SQL Database.HTML5的Web SQL Databases的确很诱惑人,当你发现可以用与mysql查询一样的查询语句来操作本地数据库时,你会发现这东西挺有趣的.今天,我们一起来了解HTML 5的Web SQL Database API. 下面将一一将介绍怎样创建打开数据库,创建表,添加

【zepto学习笔记01】核心方法$()(补)

前言 在很久之前,我们项目有一个动画功能,功能本身很简单,便是典型的右进左出,并且带动画功能 以当时来说,虽然很简单,但是受限于框架本身的难度,就直接使用了CSS3的方式完成了功能 当时主要使用transform与animation实现功能,并且用了一个settimeout执行回调,然后此事便不了了之了 但是出来混总是要还的,这不,最近相似的东西又提了出来,我们当然可以将原来的那套东西拿来用,但是看着那个settimeout总是不是滋味,因为这样捕捉回调的效果以及可能引起的BUG大家都懂,于是就