Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否会有保留周期?_Objective C - Fatal编程技术网

Objective c 是否会有保留周期?

Objective c 是否会有保留周期?,objective-c,Objective C,下面是一些抽象代码。有基类“BaseClass”和子类“MyClass” MyClass初始化方法中是否有保留周期?是;这是一个循环 您可以通过将代码粘贴到一个简单的项目中,然后使用Xcode 8的内存图调试器进行检查 复制/粘贴此可编译版本的代码,然后生成并运行。它将永远运行,什么也不做。单击小对象图调试器图标(三个带线的圆圈),它将显示从sub实例通过块返回到自身的强引用 @interface Base:NSObject @property (nonatomic, copy) dispatc

下面是一些抽象代码。有基类“BaseClass”和子类“MyClass”


MyClass初始化方法中是否有保留周期?

是;这是一个循环

您可以通过将代码粘贴到一个简单的项目中,然后使用Xcode 8的内存图调试器进行检查

复制/粘贴此可编译版本的代码,然后生成并运行。它将永远运行,什么也不做。单击小对象图调试器图标(三个带线的圆圈),它将显示从sub实例通过块返回到自身的强引用

@interface Base:NSObject
@property (nonatomic, copy) dispatch_block_t block;
@end
@interface Sub:Base
@property (strong, nonatomic) NSString *myString;
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Sub *s = [[Sub alloc] init];
    }
    dispatch_main();
    return 0;
}

@implementation Base
- initBaseClassWithBlock:(dispatch_block_t)block
{
    self = [super init];

    if (self) {
        self.block = block;
    }

    return self;
}
@end


@implementation Sub
- (instancetype)init {
    if (self = [super initBaseClassWithBlock:^{
        NSLog(@"%@", self.myString);
    }]) {
        ;
    }
    return self;
}
@end
@interface Base:NSObject
@property (nonatomic, copy) dispatch_block_t block;
@end
@interface Sub:Base
@property (strong, nonatomic) NSString *myString;
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Sub *s = [[Sub alloc] init];
    }
    dispatch_main();
    return 0;
}

@implementation Base
- initBaseClassWithBlock:(dispatch_block_t)block
{
    self = [super init];

    if (self) {
        self.block = block;
    }

    return self;
}
@end


@implementation Sub
- (instancetype)init {
    if (self = [super initBaseClassWithBlock:^{
        NSLog(@"%@", self.myString);
    }]) {
        ;
    }
    return self;
}
@end