关于block

__weak __typeof(self)weakSelf = self;
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
    __strong __typeof(weakSelf)strongSelf = weakSelf;
}];

weakSelf是为了block不持有self,避免循环引用( block 持有了 self,block 持有了block。block 在self释放时候会释放,如果block持有了self,这时候self就释放不了),而再声明一个strongSelf是因为一旦进入block执行,就不允许self在这个执行过程中释放。block执行完后这个strongSelf会自动释放,没有循环引用问题。

1.__weak

1>.若附有__weak 修饰符的变量所引用的对象被废弃,则将nil 赋值给该变量。

2>.使用附有__weak 修饰符的变量,即是使用注册到autoreleasepool 中的对象。

2.因为weakSelf 注册到autoreleasepool里边,可能会被释放所以在block里边要用把weakself修饰成强引用strongself来避免释放。

3.但是修饰成强引用strongself,会不会和self一样了呢?要是一样的话weakself是不是没有作用了,还是会出现循环引用问题.

1>.答案是不会的。因为:block 只有截获外部变量时,才会引用它。如果是内部新建一个,则没有任何问题。
 就是说block会引用self这个外部的变量,但是strongSelf这个内部变量是不会引用的。