深入Objective-C
此专栏分享的主要内容包括OC的语法、如封装继承多态、类别、类本质、内存管理、模型设计、代码块、自动引用技术、循环引用等,并提供个人见解,方面大家交流与学习
陆讯
南大软院计算机科学与技术,同济大学工商管理MBA,一个懂技术的产品人,从事互联网产品事业,励志做有价值、有温度的产品...
展开
-
Foundation框架 - NSNumber类
NSNumber类NSFormatter#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"1******************* NSFormatter ***********************"); N原创 2015-03-20 10:08:28 · 1447 阅读 · 0 评论 -
Foundation框架 - NSException类
NSException类WBStudentManager.h#import <Foundation/Foundation.h>NSString* const NameInvalidException ;@interface WBStudentManager : NSObject- (void)registStudent:(NSString*)name;@endWBStudentManager原创 2015-03-20 09:51:23 · 1513 阅读 · 0 评论 -
Foundation框架 - NSDate类
NSDate类//// main.m// 8.NSDate//// Created by wangzhaolu on 14-2-25.// Copyright (c) 2014年 Turing. All rights reserved.//#import <Foundation/Foundation.h>static void transTimeZone(NSString*原创 2015-03-19 10:19:36 · 1912 阅读 · 1 评论 -
Foundation框架 - NSSet类 、NSMutableSet类
NSSet和NSArray的对比/* NSSet和NSArray的对比 1> 共同点 * 都是集合,都能存放多个OC对象 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举) * 本身都不可变,都有一个可变的子类 2> 不同点 * NSArray有顺序,NSSet没有顺序 */重点内容#import <Foundation/Foun原创 2015-03-19 10:12:58 · 1338 阅读 · 0 评论 -
Foundation框架 - NSDictionary类、NSMutableDictionary类
NSArray、NSSet、NSDictionary/* 集合 1.NSArray\NSMutableArray * 有序 * 快速创建(不可变):@[obj1, obj2, obj3] * 快速访问元素:数组名[i] 2.NSSet\NSMutableSet * 无序 3.NSDictionary\NSMutableDictionary * 无序 * 快速创建(不可变):@{key原创 2015-03-19 09:57:56 · 1414 阅读 · 0 评论 -
Foundation框架 - NSArray类 、NSMutableArray类
NSArray类 、NSMutableArray类数组创建 NSLog(@"*************************** 数组创建 ****************************"); //方式一: NSArray *arr1 = [NSArray arrayWithObject:@"jack"]; NSLog(@"arr1数组元素为原创 2015-03-18 17:35:28 · 1256 阅读 · 0 评论 -
Foundation框架 - NSString类 、NSMutableString类
不可变字符串NSStringNSLog(@"1*********************字符串的创建*********************"); //方式一: NSString *s1 = @"This is a NSString"; NSLog(@"s1: %@",s1); //方式二:已过时(不推荐使用) //NS原创 2015-03-18 17:00:33 · 1239 阅读 · 0 评论 -
Objective-C - 属性和成员变量在.h文件和.m文件区别
属性和成员变量在.h文件和.m文件区别属性在.h文件中和在.m中声明是有区别的。区别就是: 在.h文件中声明的属性,外部类可以通过“类实例.属性”来调用, 但在.m中声明的则不可以,获取和设置的方法,只能是通过setValue:forKey和valueForKey来实现。成员变量,有三种权限,就是大家都知道的@private、@protected、@public ,写在.m文件中时,相当于是@p原创 2015-05-18 09:55:42 · 4021 阅读 · 0 评论 -
Objective-C - 代码块block
代码块block/* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^(int a, int b) { return a - b; }; ^() { NSLog(@"----------"); }; ^ { NSLog(@"--原创 2015-04-23 09:55:57 · 1394 阅读 · 0 评论 -
Objective-C - ARC(Automatic Reference Counting)自动引用技术详解
ARC特点与判断准则/* ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release、retain、retainCount 2> 允许重写dealloc,但是不允许调用[super dealloc] 3> @property的参数 * strong :成员变量是强指针(适用于OC对象类型) * weak :成员变量是弱指针(适用于OC对象原创 2015-04-23 09:52:30 · 2048 阅读 · 0 评论 -
Objective-C - autorelease详解
autorelease详解/* 1.autorelease的基本用法 1> 会将对象放到一个自动释放池中 2> 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作 3> 会返回对象本身 4> 调用完autorelease方法后,对象的计数器不变 2.autorelease的好处 1> 不用再关心对象释放的时间 2> 不用再关心什么时候调用release 3.autor原创 2015-04-23 09:43:17 · 1309 阅读 · 0 评论 -
Objective-C - 循环引用问题
循环引用问题/* 1.@class的作用:仅仅告诉编译器,某个名称是一个类 @class Person; // 仅仅告诉编译器,Person是一个类 2.开发中引用一个类的规范 1> 在.h文件中用@class来声明类 2> 在.m文件中用#import来包含类的所有东西 3.两端循环引用解决方案 1> 一端用retain 2> 一端用assign */#import <Foundati原创 2015-04-21 09:06:49 · 1926 阅读 · 0 评论 -
Objective-C - 模型的设计
模型的设计int main(){ //新建2个用户 User *u = [[User alloc] init]; u.name = @"2B"; User *u2 = [[User alloc] init]; u2.name = @"傻B"; // 新建2条微博 Status *s = [[Status alloc] init]; s.t原创 2015-04-21 09:04:37 · 1268 阅读 · 0 评论 -
Objective-C - @property参数
@property参数/* 1.set方法内存管理相关的参数 * retain : release旧值,retain新值(适用于OC对象类型) * assign : 直接赋值(默认,适用于非OC对象类型) * copy : release旧值,copy新值 2.是否要生成set方法 * readwrite : 同时生成setter和getter的声明、实现(默认) * readonl原创 2015-04-21 09:01:41 · 1501 阅读 · 0 评论 -
Objective-C - 多个对象之间的内存管理
多个对象之间的内存管理/* 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release) 3.谁retain,谁release 4.谁alloc,谁release */#import <Foundation/Foundation.h>#import "Person.h"#i原创 2015-04-21 08:56:01 · 1301 阅读 · 0 评论 -
Objective-C - 自动引用计数器
引用计数器的基本操作/* 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc * 当一个对象要被回收的时候,就会调用 * 一定要调用[super dealloc],这句调用要放在最后面 2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵原创 2015-04-20 13:25:00 · 1166 阅读 · 0 评论 -
Objective-C - SEL (@selector) 原理及本质
SEL (@selector) 原理及本质/* 1.SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法2.@selector()就是取类方法的编号,等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.它的结果是一个SEL类型。这个原创 2015-04-20 09:42:22 · 2831 阅读 · 3 评论 -
Objective-C - description 方法
description 方法#import <Foundation/Foundation.h>#import "Person.h"void test9(){ // 输出当前函数名 NSLog(@"%s\n", __func__);}int main(){ // 输出行号 NSLog(@"%d", __LINE__); // NSLog输出C语言字符串的原创 2015-04-20 09:35:45 · 1541 阅读 · 0 评论 -
Objective-C -类的本质
类的本质#import "Person.h"#import "Student.h"#import "GoodStudent.h"/* 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。 2.当第一次使用某个类时,就会调用当前类的+initialize方法 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方原创 2015-04-20 09:31:47 · 1165 阅读 · 0 评论 -
Objective-C - 分类(类别)的应用 Category
分类(类别)的应用 Category/* 分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法 使用注意: 1.分类只能增加方法,不能增加成员变量 2.分类方法实现中可以访问原来类中声明的成员变量 3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类 */#i原创 2015-04-20 09:22:34 · 1249 阅读 · 0 评论 -
Objective-C - 自定义构造方法
自定义构造方法@interface Person : NSObject@property NSString *name;@property int age;/* 自定义构造方法的规范 1.一定是对象方法,一定以 - 开头 2.返回值一般是id类型 3.方法名一般以initWith开头*/- (id)initWithName:(NSString *)name;- (id)initWith原创 2015-04-19 08:47:54 · 1906 阅读 · 0 评论 -
Objective-C - 构造方法
构造方法// 构造方法:用来初始化对象的方法,是个对象方法,-开头// 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值/* 重写构造方法的注意点1.先调用父类的构造方法([super init])2.再进行子类内部成员变量的初始化 */int main(){ // Person *p = [Person new]; /* 完整地创建一个可原创 2015-04-19 08:43:53 · 1316 阅读 · 0 评论 -
Objective-C - @property与@synthesize
@property与@synthesize@interface Person : NSObject{ int _age; // int age; int _height; double _weight; NSString *_name;}// @property:可以自动生成某个成员变量的setter和getter声明@property int age;//原创 2015-04-19 08:39:38 · 1141 阅读 · 0 评论 -
Objective-C - 成员变量作用域
成员变量作用域/** * * @public : 在任何地方都能直接访问对象的成员变量 * @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) * @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) * @package : 只要处在同一个框架中,就能直原创 2015-04-19 08:33:23 · 1366 阅读 · 0 评论 -
Objective-C - 点语法本质
点语法本质#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; // 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; /原创 2015-04-19 08:26:14 · 1142 阅读 · 0 评论 -
Objective-C - 封装、继承、多态综合实例
设计2个类,类之间的关系自拟(比如继承、组合)/* 1.设计2个类,类之间的关系自拟(比如继承、组合) 1> 车 (1)属性 * 轮子数 * 速度 (2)方法 * 属性相应的set和get方法 2> 客车 (1)属性 * 轮子数 * 速度 * 座位数 (2)方法 * 属性相应的set和get方法*/// 客车 是一种 车,因此用继承关系#import <Foundation/原创 2015-04-18 13:16:07 · 1545 阅读 · 0 评论 -
Objective-C - 多态的经典实例
多态的经典实例/* 多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象 4.局限性: 1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法 */// 动物@interface Animal : NSObject- (void)eat;@原创 2015-04-18 13:06:05 · 1264 阅读 · 0 评论 -
Objective-C - 继承的经典实例
继承/* 1.继承的好处: 1> 抽取重复代码 2> 建立了类之间的关系 3> 子类可以拥有父类中的所有成员变量和方法 2.注意点 1> 基本上所有类的根类是NSObject *//********Animal的声明*******/@interface Animal : NSObject{ int _age; double _weight;}- (void)set原创 2015-04-18 13:01:58 · 1551 阅读 · 0 评论 -
Objective-C - super的作用
super的作用#import <Foundation/Foundation.h>/* super的作用 1.直接调用父类中的某个方法 2.super处在对象方法中,那么就会调用父类的对象方法 super处在类方法中,那么就会调用父类的类方法 3.使用场合:子类重写父类的方法时想保留父类的一些行为 */// 僵尸@interface Zoombie : NSObject- (vo原创 2015-04-18 12:59:09 · 1338 阅读 · 0 评论 -
Objective-C - self用法详解
self的用途/* self的用途: 1> 谁调用了当前方法,self就代表谁 * self出现在对象方法中,self就代表对象 * self出现在类方法中,self就代表类 2> 在对象方法利用"self->成员变量名"访问当前对象内部的成员变量 2> [self 方法名]可以调用其他对象方法\类方法 */@interface Dog : NSObject- (void)bark;原创 2015-04-18 12:58:32 · 1617 阅读 · 0 评论 -
Objective-C - 类方法与对象方法
类方法与对象方法/* 对象方法 1> 减号 - 开头 2> 只能由对象来调用 3> 对象方法中能访问当前对象的成员变量(实例变量) 类方法 1> 加号 + 开头 2> 只能由类(名)来调用 3> 类方法中不能访问成员变量(实例变量) 类方法的好处和使用场合 1> 不依赖于对象,执行效率高 2> 能用类方法,尽量用类方法 3> 场合:当方法内部不需要使用到成员变量时,就可以改为原创 2015-04-18 10:53:06 · 1920 阅读 · 0 评论 -
Objective-C - 封装的本质与细节
封装set方法@interface Student : NSObject{ // 成员变量尽量不要用@public // @public int age; //@public // 只读(readonly):只允许外界访问我的no,不允许外界修改我的no int no; // 只需要提供get方法}///* set方法 1.作用: 提供一个方法原创 2015-04-18 10:44:46 · 1517 阅读 · 0 评论 -
Objective-C - 动态方法、静态属性实例
设计”狗”类/* 设计一个”狗“类 1> 属性 * 颜色 * 速度(单位是m/s) * 性别 * 体重(单位是kg) 2> 行为 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重 * 吠(叫):输出所有的属性 * 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重 * 比较颜色:跟别的狗比较颜色,如果一样,返回YES,不一样,返回NO * 比较速度:跟别的狗比较速度原创 2015-04-18 10:38:33 · 2839 阅读 · 0 评论 -
Objective-C - 方法的声明和实现
方法与函数/* 方法 1.对象方法都是以减号 - 2.对象方法的声明必须写在@interface和@end之间 对象方法的实现必须写在@implementation和@end之间 3.对象方法只能由对象来调用 4.对象方法归类\对象所有 函数 1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有 2.函数调用不依赖于对象 3.函数内部不能原创 2015-04-18 10:30:03 · 4785 阅读 · 0 评论 -
Objective-C - 类的设计实例
类的设计1.类的设计:1> 类名* 类名的第一个字母必须是大写* 不能有下划线* 多个英文单词,用驼峰标识2> 属性3> 行为(功能)2.植物大战僵尸的僵尸* 类名:Zoombie* 属性:life、speed、gongjili* 行为:walk、bite、die3.雷电的飞机* 类名:Plane* 属性:life、gongjili、speed、bombCount* 行为:f原创 2015-04-18 10:24:42 · 1404 阅读 · 0 评论