核心语法 - 总结



一、点语法本质

  • 其实点语法本质还是方法调用
  • 当使用点语法时,编译器会自动展开称相应的方法
1 //方法调用
2 Student *stu = [[Student alloc] init];
3 [stu setAge:10];
4 int age = [stu age];
5 //-----------------------------我是华丽分割线-----------------------------
6 //点语法
7 stu.age = 10;
8 int age = stu.age;

 



二、成员变量的作用域

  • @public : 在任何地方都能直接访问对象的成员变量
  • @private : 只能在当前类的对象方法中直接访问 ( @implementation 中默认是 @private )
  • @protected  : 可以在当前类及其字累的对象方法中直接访问 (默认就是 @protected )
  • @package : 只要处在同一个框架中,就能直接访问对象的成员变量
  • @interface 和 @implementation 中不能声明同名的成员变量
  • 没有 @interface ,只有 @implementation ,也可以开发同一个类


三、@property 和 @synthesize 、setter 和 getter 及使用细节

  • @property 用在 @interface 中,用来自动生成 setter 和 getter 声明
  • @synthesize 永在 @implementation 中,用来生成 setter 和 getter 实现
  • @synthesize 细节:1> @synthesize age = _age;(setter 和 getter 实现中会访问成员变量 _age,如果成员变量 _age 不存在,就会自动生成一个 @private 的成员变量 _age 
    •       2> @synthesize age;(setter 和 getter 实现中会访问成员变量 age,如果成员变量 age 不存在,就会自动生成一个 @private 的成员变量 age)
    •       3> 若手动实现了 setter 方法,编译器就只会自动生成 getter 方法
  • 自从 Xcode4.4 后,@property 就独揽了 @synthesize 的功能。也就是说,@property 可以同时生成 settergetter声明实现
  • 默认情况下,setter 和 getter 方法中的实现,会访问下划线 _ 开头的成员变量
 1 //--[interface.h]---Xcode4.2之前的语法---------------我是华丽分割线--------
 2 @property int age;                         //@property
 3 //--[interface.h]--------??等价于??--------
 4 - (void)setAge;
 5 - (int)age;
 6
 7 //--[implementation.m]-------------------------------我是华丽分割线--------
 8 @synthesize int age = _age;                //@synthesize
 9 //--[implementation.m]---??等价于??--------
10 - (void)setAge {
11     _age = age;
12 }
13 - (int)age {
14     return _age;
15 }
16 //--[implementation.m]-------------------------------我是华丽分割线--------
17 @synthesize int age;                        //@synthesize
18 //--[implementation.m]---??等价于??--------
19 - (void)setAge {
20     _age = age;
21 }
22 - (int)age {
23     return age;
24 }
25
26 //--[interface.h]---Xcode4.4之后有了以下新语法-------我是华丽分割线-------
27 @property int age;                           //@property
28 //--[interface.h]---------??等价于??-------
29 @interface Student:NSObject{
30     int _age;
31 }
32 - (void)setAge;
33 - (int)age;
34 //--[implementation.m]---------------------
35 - (void)setAge {
36     _age = age;
37 }
38 - (int)age {
39     return _age;
40 }                


四、id

  • 是万能指针,能指向任何对象,相当于 NSObject * , id 后面不要加上*
  • 调用一个不存在的方法,编译器会马上报错
  • id 是一个结构体,OC 对象本身是一个结构体
1 typedef struct objc_object {
2   Class isa;    //每个对象都有一个isa,且isa始终指向当前类本身
3 } *id;            // id 定义为一个结构指针


五、构造方法(基本概念、重写 init 方法、init 方法的执行过程、自定义)

  • 完整地创建一个可用的对象:1> 分配存储空间 +alloc,2> 初始化 - init (+ new 方法连续完成 1>、2> 步骤)
  • 基本概念:用来初始化对象的方法,是一个对象方法, 号开头,init 方法就是构造方法
  • 重写 init 方法:一定要调用回 super 的 init 方法。重写目的:为了让对象创建出来,就使成员变量具有固定的值

1 //----Student.m------------- 2 - (id)init { 3 if (self = [super init]) //调用回super的init方法,返回对象self,即isa为Student对象 4 { //初始化成功 5 _age = 10; 6 } 7 return self; 8 }

1 //------NSObject------------
2 - (id)init {
3     isa = [self class];
4     return slef;
5 }
  • init 方法的执行过程:,先初始化父类,再初始化子类。
  • 自定义:规范:1>一定是对象方法,一定以 - 开头,2>返回值一般为 id 类型,3>方法名一般以 init 开头
  • 初始化的好习惯:初始化成员变量在其所在类实现中进行(优点:去耦合。即当父类改变成员变量名称,就不用改子类的代码)


六、更改 Xcode 模版(main.m 、注释)

  • main.m:如 Mac Application的终端项目:进入/Users/jackieyi/Library/Developer/Xcode/Templates/Project Templates/Application/Command Line Tool.xctemplate/Templateinfo.plist,按需要修改这个plist文件即可。
  • 注释:如 Mac Application的终端项目:进入/Users/JackieYip/Library/Deverloper/Xcode/Templates/File Templates/Cocoa/Objective-C class.xctemplate/NSObject/___FILEBASENAME___.m,或按需要选对应文件进行修改即可。

七、分类(基本使用、使用注意、给 NSString 增加类方法及扩充对象方法)

  • 作用:在不改变原来类内容的基础上,可以为类增加一些方法
  • 注意:1> 只能增加方法,无法增加成员变量
    • 2> 但其方法中可以访问成员变量
    • 3> 分类可以重新实现原来类中的方法,但是会覆盖原来的方法,会导致原来的方法无法再使用
    • 4> 方法调用的优先级:高|分类(最后参与编译的分类优先)->原类->父类|低
      • 编译顺序的查看:项目-TARGETS - Builde Phases - Complie Sources,由上往下顺序编译(全为 .m 文件,.h 文件不参与编译)

八、作业点评

九、类的深入研究(本质、类对象的使用、类的加载和初始化)

十、description 方法

十一、NSLog 输出补充

十二、SEL (基本用法及其他使用)

时间: 2024-08-08 09:38:43

核心语法 - 总结的相关文章

PHP核心语法总结

这些天学习了PHP的核心编程语法,PHP核心语法概括起来不多,大致分为php标签,语法规范.数据类型.变量.常量.当然还有预定义的,还有操作符.循坏等等,最后几天学习了函数,其中数组的常用函数非常多.例如array_merge.rand.asort.arsort这些,在日后项目中会用的比较多. 数组的函数里,foreach()与while-list-each()两个遍历数组的函数最为强大,不仅能解决访问数组的问题,而且它的返回值各有特点,可以灵活运用在往后数据库数据的处理中. 平时的应用PHP语

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

关情纸尾-----OC面对对象的核心语法

有点愧疚,这几个月荒废了,也浪费了很多时间. 接下来是我看的关于核心语法的一些笔记,可能不全也可能有错误,希望大家可以指出来. 一.点语法 点语法的本质是调用. 例如: Person *p = [Person new]; //赋值 p.age = 10; // 等价于[P setAge:10];调用setter //取值 int a = p.age;// 等价于[P age];调用getter 二.成员变量的作用域 @public  任何地方都能直接访问 @private 只能在当前类的对象方法

[php入门] 2、基础核心语法大纲

1 前言 最近在学PHP,上节主要总结了PHP开发环境搭建<[php入门] 1.从安装开发环境环境到(庄B)做个炫酷的登陆应用>.本节主要总结PHP的核心基础语法,基本以粗轮廓写,可以算作核心大纲吧! 2 新建环境 1.配置根目录可通过修改配置文件 2.根目录用来存放应用程序的源码及资源 3.PHP的代码必须放在<?PHP    ?>中 4.变量只能以汉字.字母.下划线开头 5.输出:echo 6.编码问题:创建的文件都有编码,我们一般用UTF-8,但是系统默认的是其他编码,因此要

OC语言-04-OC语言-核心语法

一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成set方法 不能在set.get方法中用self使用点语法,会造成死循环 二.property和synthesize关键字 1> @property 作用 ① 自动生成某个成员变量的set方法和get方法 使用注意 ① 只能出现在@interface中 ② 可以使用逗号运算符为多个同类型的成员变量生成set

黑马程序员—16-oc核心语法

一.    变量作用域 l  变量的作用域主要分为四种: u  (1)@public (公开的)在有对象的前提下,任何地方都可以直接访问. u  (2)@protected (受保护的)只能在当前类和子类的对象方法中访问 u  (3)@private (私有的)只能在当前类的对象方法中才能直接访问 u  (4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问 l  使用注意和补充 u  (1)在类的实现即.m文件中也可以声明成员变量,但是因为

Java基础学习笔记二十三 Java核心语法之反射

类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 链接指的是将Java类的二进制代码合并到JVM的运行状态之中的过程.在链接之前,这个类必须被成功加载.类的链接包括验证.准备和解析等几个步骤. 验证:是否有正确的内部结构,并和其他类协调一致. 准备:负责为类的静态成员分配内存,并设置默认初始化值 解析:

JavaScript核心语法学习部分(四)

①switch-case语句 switch...case... 多条分支,根据条件判断,选择执行. 语法: switch(表达式){  case 表达式1://如果表达式的值===表达式1的值就执行代码段1;  代码段1: case 表达式2: 代码段2; case 表达式n: 代码段n; default://如果表达式的值和所有的case都不相等,执行默认代码段; 默认代码段; }

Objective-C:06_面向对象-核心语法

点语法:    点语法的本质还是方法调用 当使用点语法时,编译器会自动展开成相应的方法 Person *p = [Person new];      p.age=10;  //编译器编译的时候会自动将这一行代码转换成 [p setAge:10];            int a=p.age;  //编译器编译的时候会自动将这一行代码转换成 int a  = [p age]; 使用点语法的时候要注意不要形成死循环: - (void)setAge:(int)age {     //下面的代码将引发