摘要: 手把手教你ARC——iOS/Mac开发ARC入门和使用Revolution of Objective-c本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论。请不要将本文的部分或全部内容用于商用,谢谢合作。欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by-hand/本文适合人群:对iOS开发有一定基础,熟悉iOS开发中内存管理的Reference Counting机制,对ARC机制有听闻很向往但是一直由于种种原因没有使用的童鞋。本文将从ARC机理入手对这个解放广大iOS开发者 阅读全文
posted @ 2014-03-11 23:07 谦默 阅读(659) 评论(0) 推荐(0)
摘要: 1.@class使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类; 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相互声明,编译不会报错!用法:使用 @class 类名; 就可以引用一个类,说明一下它是一个类@class和#import的区别:#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中 B *b 只是类的声明,具体这个类里有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中信息如果有上百个头文件都#import了同一个. 阅读全文
posted @ 2014-03-11 21:04 谦默 阅读(1030) 评论(0) 推荐(1)
摘要: iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码// 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读- (void)setCar:(Car *)car{ if (_car != car ) { [_car release]; // 释放旧车 _car = [car retain]; // 新车引用计数加一 }}// 2.Person类在回收的时候也必须将它所拥有的车对象回收- (void)dealloc{ // Person对象被回收 那么将Per.. 阅读全文
posted @ 2014-03-11 15:46 谦默 阅读(395) 评论(0) 推荐(0)
摘要: /* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 *//********************************* Person.h文件 *********************************/#import #import "Car.h"@interface Person : NSObject{ Car *_car;}- (void)setCar:(Car *)car;- (Car *)car;@end/*********************** 阅读全文
posted @ 2014-03-10 20:46 谦默 阅读(217) 评论(0) 推荐(0)
摘要: 单个对象的内存管理非常简单无非就是alloc对应release,retain对应release。但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢。比如同样一本书有好3个人购买,那意味着3个人都在引用这本书。在内存中如图所示:那么如果Person对象引用Book对象的话就必须给Book对象的引用计数+1,如果不再引用Book对象就要把Book对象中的引用计数减1。遵循"有加必有减"1.多对象内存管理原则分析只要还有人在使用某个对象,那么这个对象就不会被回收只要你想用这个对象,就让对象的计数器+1当你不再使用这个对象时,就让对象的计数器-1只要有人在使 阅读全文
posted @ 2014-03-10 11:48 谦默 阅读(375) 评论(0) 推荐(1)
摘要: 1.什么是内存管理移动设备的内存极其有限,每个app所能占用的内存是有限制的当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等管理范围:任何继承了NSObject的对象需要去管理内存,但是对于对其他基本数据类型(int、char、float、double、struct、enum等)结构,枚举等不用去关心内存- (void)test{ int a = 20; int b = 10; Person *person = [[Person alloc] init]; // 方法未退出之... 阅读全文
posted @ 2014-03-09 16:30 谦默 阅读(1155) 评论(0) 推荐(0)
摘要: @interface Person : NSObject+ (void)test1;- (void)test2;@end // 根据.h文件中定义的Person类和方法 执行完这行代码 在内存中如下 Person *person = [[Person alloc] init];SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法1.方法的存储位置在内存中每个类的方法都存储在类对象中每个方法都有一个与之对应的SEL类型的数据根据一个SEL数据就可以找到对应的方法地址,进而调用方法SEL类型的定义: typedef struct objc_s... 阅读全文
posted @ 2014-03-08 01:11 谦默 阅读(3161) 评论(1) 推荐(0)
摘要: 1.description方法是NSObject自带的方法,包括类方法和对象方法+ (NSString *)description; // 默认返回 类名- (NSString *)description; // 默认返回 2.默认情况下利用NSLog和%@输出对象的时返回的就是类名和内存地址3.修改NSLog和%@的默认输出:重写类对象或者实例对象的description方法即可。因为NSLog函数进行打印的时候会自动调用description方法/******************************** Person.h文件***************************** 阅读全文
posted @ 2014-03-07 19:21 谦默 阅读(4564) 评论(0) 推荐(0)
摘要: 1.类也是个对象类是一个对象是Class类型的对象简称类对象Class类型的定义// 一个任意的类型,表示一个Objective-C类typedef struct objc_class *Class;类名就代表着类对象,每个类只有一个类对象获取类对象 // 获取类对象两种方式person1 和 person2 Class person1 = [Person class]; Person *p = [Person new]; Class person2 = [p class]; // 类对象调用类方法 Person *person3 =... 阅读全文
posted @ 2014-03-07 13:46 谦默 阅读(744) 评论(0) 推荐(0)
摘要: /******************* NSString+NumCount.h文件 ******************************/#import @interface NSString (NumCount)// 给NSString类扩充一个类方法计算字符串中数字的个数+ (int)numberOfString:(NSString *)str;// 给NSString类扩充一个对象方法计算字符串中数字的个数- (int)numberCount;@end/******************* NSString+NumCount.m文件 ********************* 阅读全文
posted @ 2014-03-06 18:18 谦默 阅读(265) 评论(0) 推荐(0)