In the end of the article the author addresses some of the pitfalls of using weak pointers. You'll only shoot yourself in the foot if you don't fundamentally understand weak pointers and why you're using them in the first place.
The good news is the vast majority of code using Weak semantics is gratuitous - "clever" code that is actually broken premature optimization, and the fix is to just Don't Do That.
- you need to remember to check the result for nil/null, but the type system won't tell you
- if you upgrade twice in a row, you can have both fail, both succeed, or the first one succeed and the second one fail
It can also be tricky to use them as building blocks for weak collections, if you want to avoid unbounded growth.