Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
aaccb01d
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
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 => {
```
### 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 已知待解决问题(持续更新)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录