Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
aaccb01d
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
173
Star
2
Fork
41
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
12
列表
看板
标记
里程碑
合并请求
14
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
12
Issue
12
列表
看板
标记
里程碑
合并请求
14
合并请求
14
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
aaccb01d
编写于
7月 28, 2024
作者:
lizhongyi_
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uts-for-ios.md
上级
0455e9c9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
102 addition
and
0 deletion
+102
-0
docs/plugin/uts-for-ios.md
docs/plugin/uts-for-ios.md
+102
-0
未找到文件。
docs/plugin/uts-for-ios.md
浏览文件 @
aaccb01d
...
@@ -885,6 +885,108 @@ DispatchQueue.main.async(execute=():void => {
...
@@ -885,6 +885,108 @@ DispatchQueue.main.async(execute=():void => {
```
```
### 6.4 如何销毁原生对象实例
在 uts 插件中通过
`export`
导出给
`js`
用的
`class`
, 创建出的 class 实例会被一直保存在内存中,如果不主动销毁,可能会造成
内存泄漏的问题。我们在 UTSiOS 类型上提供了
`destroyInstance()`
的静态方法来实现销毁原生对象的功能。开发者需要在使用这个对象的页面的
`unmounted() `
时机将对象销毁。
> HBuilder X 4.25+ 版本支持
具体使用示例如下:
在 uts 插件中定义 class Test,并将其
`export`
:
```
ts
// uts 插件中 export class
export
class
Test
{
id
:
number
;
name
:
string
;
constructor
(
id
:
number
,
name
:
string
)
{
this
.
id
=
id
;
this
.
name
=
name
;
}
doSomething
()
{
console
.
log
(
"
do something
"
);
}
// 实现 destory 方法
destory
()
{
UTSiOS
.
destroyInstance
(
this
)
}
}
```
在
`uvue`
页面中使用:
```
ts
// 创建 test 对象,并调用方法
let
test
=
new
Test
(
"
1111
"
,
"
name_11111
"
);
test
.
doSomething
();
this
.
test
=
test
;
```
在
`uvue`
页面
`unmounted`
时销毁对象:
```
ts
//
unmounted
()
{
this
.
test
.
destory
()
}
```
### 6.5 如何避免闭包可能造成的循环引用
在 uts 插件或者组件中,如果自定义的
`class`
中定义了闭包类型的属性,而闭包内部又使用了
`class`
的其他属性或者
`class`
自身,
就会造成对象循序引用,导致内存泄漏。为避免产生循环引用我们需要在闭包内使用
`"[weak self]"`
标记。
具体示例如下:
```
ts
export
class
Test
{
id
:
number
name
:
string
callback
:
((
res
:
string
)
=>
void
)
|
null
=
null
constructor
(
id
:
number
,
name
:
string
)
{
this
.
id
=
id
this
.
name
=
name
}
doSomething
()
{
console
.
log
(
"
do something
"
);
if
(
this
.
callback
==
null
)
{
this
.
callback
=
(
res
:
string
)
=>
{
"
[weak self]
"
console
.
log
(
this
?.
name
,
res
)
}
}
this
.
callback
?.(
"
like basketball
"
)
}
destory
()
{
UTSiOS
.
destroyInstance
(
this
)
}
}
```
上述示例中,自定义类
`Test`
中持有一个
`callback`
的闭包属性,而
`callback`
闭包实现中有引用了
`this.name`
,这就导致了循环引用。
因此在
`callback`
闭包体的最开头部分使用了
`"[weak self]"`
标记,避免产生循环引用。
> 特别注意:
> 使用 `"[weak self]"` 标记以后,this 就变成了可为空的值,访问标记后的 `this` 的任何属性和方法都要使用可选链或者做非空断言。
> 判断是否需要加 `"[weak self]"` 标记的标准是:callback 是否被 this 持有,闭包内是否访问了 this,如果满足这两条就需要加。
## 7 已知待解决问题(持续更新)
## 7 已知待解决问题(持续更新)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录