gpt4 book ai didi

ios - 代码仅在我在实现 {} 中初始化对象时才有效

转载 作者:行者123 更新时间:2023-11-28 18:37:22 25 4
gpt4 key购买 nike

仅当 LBYouTubePlayerController* controller; 位于 @implementation ViewController 内时,下一个代码才有效。有人可以向我解释为什么我会出现这种行为吗?有什么区别?

.h文件:

#import <UIKit/UIKit.h>
#import "LBYouTube.h"

@interface ViewController : UIViewController<LBYouTubePlayerControllerDelegate>

@end

.m文件:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
{
LBYouTubePlayerController* controller;
}
- (void)viewDidLoad
{
[super viewDidLoad];
controller = [[LBYouTubePlayerController alloc] initWithYouTubeURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=1UlbCgB9vms"] quality:LBYouTubeVideoQualityLarge];
controller.delegate = self;
controller.view.frame = CGRectMake(0.0f, 0.0f, 200.0f, 200.0f);
controller.view.center = self.view.center;
[self.view addSubview:controller.view];

如果我移动 LBYouTubePlayerController* controller; 并将其放入 viewDidLoad 中,视频将不会加载:

    - (void)viewDidLoad
{
LBYouTubePlayerController* controller = [[LBYouTubePlayerController alloc] initWithYouTubeURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=1UlbCgB9vms"] quality:LBYouTubeVideoQualityLarge];
controller.delegate = self; ....}

最佳答案

在您的工作示例中,您使用的是 instance variable (ivar)。在非工作示例中,您使用的是 local variable 。这些变量的内存处理方式不同。使用 Automatic Reference Counting (ARC) , block 中声明和初始化的任何对象将在该 block 中最后一次使用该对象后自动释放(在本例中为释放)。通过声明一个实例变量,就像您在工作示例中所做的那样,您可以防止这种情况发生。只有在拥有对象 (ViewController) 本身被释放后,ivar 才会被释放。

关于ios - 代码仅在我在实现 {} 中初始化对象时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16304900/

25 4 0
文章推荐: javascript - 如何获取 DOM 中附近节点上的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com