What is preferable to use here and why?

```
__weak typeof(self) weakSelf = self;

```

or

```
__weak MyObject *weakSelf = self;

```

Obviously, `__weak id weakSelf = self;` would be the least desirable, as we would not get type checking, is that correct?

However, between the first two... which is desirable and why?

Also, any reason to use \_\_typeof instead of typeof, if clang supports using typeof?