04-OC特有语法01

一、注释

#pragma mark - 内容

作用:在Xcode中可以方便定位到该方法的存在

二、点语法

1. 利用点语法替换set方法和get方法

* 方法调用

Student *stu = [Student new];
[stu setAge:100];
int age = [stu age];

* 点语法

stu.age = 100;
int age = stu.age;

2. 点语法的本质

* 其实点语法的本质还是方法调用

* 当使用点语法时,编译器会自动展开成相应的方法

三、成员变量的作用域

1. 基本概念

局部变量、全局变量都有自己的作用域,成员变量也不例外

2. 类型

@public : 在任何地方都能直接访问对象的成员变量

@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

@protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)

@package : 只要处在同一个框架中,就能直接访问对象的成员变量

@interface和@implementation中不能声明同名的成员变量

3. @implementation补充

没有@interface,只有@implementation,也可以开发一个类

四、@property和@synthesize

1. @property

* 用在@inteface中

* 用来自动生成setter和getter的声明

* 用@property int age;就可以代替下面的两行

- (int)age;   // getter
- (void)setAge:(int)age;  // setter

* 示例

2. @synthesize

* 用在@implementation中

* 用来自动生成setter和getter的实现

* 用@synthesize age = _age;就可以代替

- (int)age{
    return _age;
}

- (void)setAge:(int)age{
    _age = age;
}

? 示例

3. @synthesize的细节

1> @synthesize age = _age;

* setter和getter实现中会访问成员变量_age

* 如果成员变量_age不存在,就会自动生成一个@private的成员变量_age

2> @synthesize age;

* setter和getter实现中会访问成员变量age

* 如果成员变量age不存在,就会自动生成一个@private的成员变量age

3> 手动实现

* 若手动实现了setter方法,编译器就只会自动生成getter方法

* 若手动实现了getter方法,编译器就只会自动生成setter方法

* 若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量

4. @property新特性

* 从Xcode4.x后,@property可以同时生成setter和getter的申明和实现

* 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量

五、id

1. 简介

* 万能指针,能指向任何OC对象,相当于NSObject *

2. 使用

// 注意:id后面不要加上*
id p = [Person new];

3. 局限性

调用一个不存在的方法,编译器会马上出错

六、构造方法

1. 对象创建原理

Person *p = [Person new]; // --> alloc + init

            || // 与下面两句相等的

Person *p = [Person alloc]; // 分配内存
Person *p = [p init]; // 初始化

可以写成下面这样

Person *p = [Person alloc] init];

2. init方法的重写

* init方法的重写过程

- (id)init {
    if (self = [super init]) {
        _age = 10;
    }

    return self;
}

3. 自定义构造方法

* 返回值是id类型

* 方法名都以init开头

- (id)initWithAge:(int)age {
    if (self = [super init]) {
        _age = age;
    }

    return self;
}

* 传递多个参数进行初始化

- (id)initWithAge:(int)age andNo:(int)no;

七、.h和.m文件的抽取

* 每个类分布在不同文件中

* 类的声明放在.h文件,类的实现放在.m文件

* 若想使用某个类,就包含某个类的.h声明文件

时间: 2024-08-04 13:11:52

04-OC特有语法01的相关文章

OC特有语法-01

点语法 利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge:100]; int age = [stu age]; 点语法 stu.age = 100; int age = stu.age; 点语法的本质 其实点语法的本质还是方法调用 当使用点语法时,编译器会自动展开成相应的方法 死循环注意 - (void) setAge:(int)age { // 下面的代码会引发死循环 self.age = age; } - (i

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

oc特有语法

分类 问题 1.什么是分类? 就是把一个类的功能,分出一部分来放在一个独立的文件中 2.分类的语法是什么样的? @interface Person(SuperMan) 3.分类与类是什么关系? 分类依赖类而存在,没有类也就没有分类 4.分类有什么作用? 用于把一个比较庞大的类,分割开来,具有相同功能的方法放到一个分类中 把太多的功能封装到一个类中,导致类文件过于庞大 5.分类中能够像类一样声明成员变量? 不能,分类中不能够定义成员变量 1>.难以维护 2>.难以使用 6.分类中能否访问原类中的

OC特有语法问题总结

分类 问题1.什么是分类? 就是把一个类的功能,分出一部分来放在一个独立的文件中2.分类的语法是什么样的?@interface Person(SuperMan) 3.分类与类是什么关系? 分类依赖类而存在,没有类也就没有分类4.分类有什么作用?用于把一个比较庞大的类,分割开来,具有相同功能的方法放到一个分类中把太多的功能封装到一个类中,导致类文件过于庞大 5.分类中能够像类一样声明成员变量?不能,分类中不能够定义成员变量1>.难以维护2>.难以使用 6.分类中能否访问原类中的成员变量? 7.分

黑马程序员——OC的特有语法

1. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ? 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Category) 2. 格式 ? 分类的声明 @interface 类名 (分类名称) // 方法声明 @end ? 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3. 好处 ? 一个庞大的类可以分模块开发 ? 一个庞大的类可以由多个人来编写,更有利于团队合作 ? 4

iOS开发——面试篇&OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

11-Objective-C特有语法:内存管理总结

一.    基本原理 1.        什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等 管理范围:任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.struct.enum等)无效 2.        对象的基本结构 每个OC对象都有自己的引用计数器,是一个整数,表示"对象被引用的次数",

10-Objective-C特有语法:Category、类对象、description、SEL、NSLog输出增强

一.    分类-Category 1.        基本用途 OC中如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 1>.继承 2>.分类(Category) 2.        格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3.        好处 一个庞大的类可以分模块开发,可以由多个人来编写,更有利于团队合作 给系统自带的类添加分类,例如: