Objective c 为什么使用typeof()创建弱引用不需要指针星号?

Objective c 为什么使用typeof()创建弱引用不需要指针星号?,objective-c,pointers,typeof,variable-types,Objective C,Pointers,Typeof,Variable Types,我搜索了一下\uuu弱和\uu块 并且发现如果我使用ARC,我应该在块中使用\uu弱引用 我的旧代码是这样的: __block GWTSDemandContactsController *safeMe = self; [GWTSService getSuggestedContactsForDemand:self.demand success:^(NSArray *contacts) { safeMe.activityLoading.hidden = true; [saf

我搜索了一下
\uuu弱
\uu块

  • 并且发现如果我使用ARC,我应该在块中使用
    \uu弱
    引用

我的旧代码是这样的:

__block GWTSDemandContactsController *safeMe = self;

[GWTSService getSuggestedContactsForDemand:self.demand success:^(NSArray *contacts) {
    safeMe.activityLoading.hidden = true;
    [safeMe setContactsForView:contacts];
} failure:^(NSError *error) {
    safeMe.activityLoading.hidden = true;
}];
__weak typeof(self) safeMe = self;
然后,当我迁移到使用ARC时,我开始使用
\uu-weak
,并发现我可以使用
typeof(self)

这非常简单,因此我不必每次保存
self
引用时都写类名。现在我的代码如下所示:

__block GWTSDemandContactsController *safeMe = self;

[GWTSService getSuggestedContactsForDemand:self.demand success:^(NSArray *contacts) {
    safeMe.activityLoading.hidden = true;
    [safeMe setContactsForView:contacts];
} failure:^(NSError *error) {
    safeMe.activityLoading.hidden = true;
}];
__weak typeof(self) safeMe = self;
但是为什么我们要避免这里的
*
?它不应该是对
self
的引用吗?通过避免
*
,我们在这里存储了什么


我不知道我是否遗漏了什么,但我无法理解这一点。

这与所有权说明符无关。只是
typeof(self)
已经是一个指针,因为
self
的类型是“指向GWTSDemandContactsController的指针”,即
GWTSDemandContactsController*
。完全写出的类型包括
*


指向的对象是一个
GWTSDemandContactsController
,但变量
self
是指向该对象的指针。

谢谢,很好的解释!我想我明白了。所以
typeof(self)
就像编写
GWTSDemandContactsController*
(包括
*
)一样?这就是你的意思,对吗?是的,就是这样。谢谢,真不敢相信这么容易!