在ARC中会自动注册到autoreleasepool中:
1、取得非自己生成并持有的对象时(即编译器检测不是以alloc/new/copy/mutableCope开始的方法名):
@ autoreleasepool{ id __strong obj = [NSMutableArray array]; //[NSMutableArray array]会自动注册到autoreleasepool }
如果是alloc/new/copy/mutableCope开头的方法必须:
@ autoreleasepool{ id __autoreleasing obj =[ [NSObject alloc] init]; }
2、对象作为函数返回值时;
+ (id) array{ return [[NSObject alloc] init]; } //or + (id) array{ id obj = [[NSObject alloc] init]; return obj; }
3、id的指针或对象的指针在没有显式指定时;
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
(NSError **)error 实际编译成 (NSError *__autoreleasing *)
注意点:
1、在ARC中不能使用autorelease方法,不能使用NSAutoreleasePool类;
2、在使用附有__weak修饰符的变量时必定要使用注册到autoreleasepool中的对象;
3、赋值给对象指针时,所有修饰符号必须一致。
但是,例如上面的第三点,定义一个NSError __strong *error = nil,传给方法参数是不一致的,其实编译器自动的做了转化:
NSError __strong *error = nil;
NSError __ autoreleasing *tmp= error;
调用方法;
error = tmp;
4、NSRunLoop等实现无论ARC有效还是无效,均能随时释放注册到autoreleasepool中的对象。
5、无论ARC,都能调用非公开方法_objc_ autoreleasePoolPrint()查看注册到autoreleasepool中的对象。
相关推荐
在ARC中,可以使用`__strong`、`__weak`、`__unsafe_unretained`和`__autoreleasing`这四种修饰符来指定变量的引用计数行为。其中,`__unsafe_unretained`与`__strong`类似,但不处理对象的释放,可能导致野指针问题...
基本概念与原理》主要讲了iOS/OSX内存管理中引用计数和内存管理规则,以及引入ARC新的内存管理机制之后如何选择ownershipqualifiers(__strong、__weak、__unsafe_unretained和__autoreleasing)来管理内存。...
Objective-C的自动引用计数(Automatic Reference Counting,简称ARC),是Apple为了简化Objective-C程序中的内存管理而引入的一种机制。在ARC出现之前,开发者必须手动管理内存,使用`retain`、`release`和`...
- **`_autoreleasing`修饰符**: 在ARC(Automatic Reference Counting)环境下,代替使用`autorelease`方法。使用`@autorelease`来标记对象,使其在适当的时候自动释放。 #### 三、内存管理细节 - **野指针**: ...
源代码中会看到`strong`、`weak`、`autoreleasing`等关键字,它们是ARC的一部分。 7. **单元测试**:高质量的源码可能包含单元测试,用于验证代码功能的正确性。Swift中使用`XCTestCase`,Objective-C中使用`...
- 错误参数应作为方法的最后一个参数,并且为`__autoreleasing NSError *`类型。 - 避免在返回值中同时表示成功/失败和错误信息,使用布尔值或异常处理。 7. **枚举与常量** - 枚举应使用`NS_ENUM`或`NS_OPTIONS...
- 使用`__strong`、`__weak`、`__autoreleasing`等关键字管理引用计数。 6. **类型安全**: - 尽量使用强类型,避免隐式转换,提高代码安全性。 - 使用`instancetype`作为类方法的返回类型,确保返回的对象类型...
4. **内存管理宏**:Objective-C的ARC(Automatic Reference Counting)中,`__strong`, `__weak`, `__autoreleasing`等关键字的使用。 5. **Objective-C类别(Category)宏**:类别允许向已有的类添加方法,如`@...
`__strong`、`__weak`、`__unsafe_unretained`和`__autoreleasing`是四种不同的引用计数修饰符。 10. **KVC(Key-Value Coding)与KVO(Key-Value Observing)**: KVC允许通过键值访问对象的属性,即使该对象没有...
2. **内存管理**:Objective-C 使用自动引用计数(ARC)来管理内存,了解如何正确使用 `strong`、`weak`、`autoreleasing` 等关键字防止内存泄漏和循环引用非常重要。 3. **模型-视图-控制器(MVC)模式**:苹果的...