Skip to content

Commit 4bd9972

Browse files
committed
高亮,MM章节排版
1 parent 60e2553 commit 4bd9972

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

source/iOS/ObjC-Basic/MM.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ ARC 是苹果引入的一种自动内存管理机制,会根据引用计数自
107107

108108
变量标识符的用法如下:
109109

110-
```objective-c
110+
```objectivec
111111
__strong Number* num = [[Number alloc] init];
112112
```
113113

@@ -201,6 +201,25 @@ for (int i = 0; i < 100000000; i++)
201201
* 当 block 以异常(exception)结束时,pool 不会被 drain
202202
* Pool 的 drain 操作会把所有标记为 autorelease 的对象的引用计数减一,但是并不意味着这个对象一定会被释放掉,我们可以在 autorelease pool 中手动 retain 对象,以延长它的生命周期(在 MRC 中)。
203203

204+
#### weak 与 Autorelease
205+
206+
众所周知,weak 不会持有对象,当给一个 weak 赋以一个自己生成的对象后,对象会立马被释放。
207+
208+
一个很常见的 warning 就是 Assigning retained object to weak variable, object will be released after assignment.
209+
210+
但是我们前面也提到了,可以持有非自己生成的对象,这通过 autorelease 实现。
211+
212+
那么如果一个 weak 被赋以一个非自己生成的对象呢?代码如下:
213+
214+
```objectivec
215+
__weak NSNumber *number = [NSNumber numberWithInt:100];
216+
NSLog(@"number = %@", number);
217+
```
218+
219+
这种情况下是可以正确打印值的。
220+
221+
[clang的文档](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-loadweak) 是这么说的:这种情况下,weak 并不会立即释放,而是会通过 `objc_loadWeak` 这个方法注册到 AutoreleasePool 中,以延长生命周期。
222+
204223
#### main.m 中 Autorelease Pool 的解释
205224
206225
大家都知道在 iOS 程序的 main.m 文件中有类似这样的语句:
@@ -459,25 +478,6 @@ Instrument 为我们提供了 Allocations/Leaks 这样好用的工具用来检
459478

460479
Allocations 工具主要用来检测 Abandoned memory. 主要思路是在一个时间切片内检测对象的声明周期以观察内存是否会无限增长。通过 hook 掉 alloc,dealloc,retain,release 等方法,来记录对象的生命周期。
461480

462-
### weak 与 Autorelease
463-
464-
众所周知,weak 不会持有对象,当给一个 weak 赋以一个自己生成的对象后,对象会立马被释放。
465-
466-
一个很常见的 warning 就是 Assigning retained object to weak variable, object will be released after assignment.
467-
468-
但是我们前面也提到了,可以持有非自己生成的对象,这通过 autorelease 实现。
469-
470-
那么如果一个 weak 被赋以一个非自己生成的对象呢?代码如下:
471-
472-
```
473-
__weak NSNumber *number = [NSNumber numberWithInt:100];
474-
NSLog(@"number = %@", number);
475-
```
476-
477-
这种情况下是可以正确打印值的。
478-
479-
[clang的文档](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-loadweak) 是这么说的:这种情况下,weak 并不会立即释放,而是会通过 `objc_loadWeak` 这个方法注册到 AutoreleasePool 中,以延长生命周期。
480-
481481
### 参考资料
482482

483483
* [Objective-C内存管理MRC与ARC](http://blog.csdn.net/fightingbull/article/details/8098133)

source/iOS/ObjC-Basic/Runloop.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ iOS 中公开暴露出来的只有 NSDefaultRunLoopMode 和 NSRunLoopCommonModes
7070

7171
在 AFNetworking 3.0 中,就有相关的代码,如下:
7272

73-
```
73+
```objectivec
7474
- (void)startActivationDelayTimer {
7575
self.activationDelayTimer = [NSTimer
7676
timerWithTimeInterval:self.activationDelay target:self selector:@selector(activationDelayTimerFired) userInfo:nil repeats:NO];

0 commit comments

Comments
 (0)