以下是播放文件的TMediaplayer的示例
var
Med : TMediaplayer;
begin
Med := TMediaPlayer.Create(self);
Med.FileName := TPath.Combine(TPath.GetDocumentsPath, 'sound.caf');
Med.Play;
end;
文件播放,但因为我给它一个所有者我创建了一个引用,并且引用计数增加,并且从不调用析构函数,因此它永远不会被释放,并且内存被泄露。
如果我创建它没有所有者
Med := TMediaPlayer.Create(nil);
当我到达end;
时,引用计数降为0并调用TMediaPlayer析构函数。
答案 0 :(得分:4)
当程序退出时,您的<?php
$portfolio_categories = get_categories(array('taxonomy'=>'portfolio_category'));
?>
<?php if ($portfolio_category != $prev_portfolio_category): ?>
<?php if ($portfolio_category = 'category1'): ?>
<figure>1</figure>
<?php else: ?>
<figure>2</figure>
<?php endif; ?>
<?php endif; ?>
<?php
$prev_portfolio_category = $portfolio_category;
?>
变量超出了范围,因此ARC在此时清理它是有道理的。
您应该在其他地方定义您的变量,也许在您的表单中。
答案 1 :(得分:4)
当释放所有者时,将释放TMediaPlayer
实例。如果您想手动释放TMediaPlayer
实例,则必须DisposeOf
实例。
要知道该实例的引用,您必须将引用存储到本地字段中。
type
TSomeForm = class( TForm )
private
FMediaPlayer: TMediaPlayer;
procedure PlaySomeSound();
end;
procedure TSomeForm.PlaySomeSound();
begin
// force destruction for ARC/NONARC platforms
FMediaPlayer.DisposeOf(); // this is also safe, if FMediaPlayer is nil
FMediaPlayer := TMediaPlayer.Create( Self );
FMediaPlayer.FileName := TPath.Combine(TPath.GetDocumentsPath, 'sound.caf');
FMediaPlayer.Play;
end;
此代码适用于ARC和NONARC平台。