Copy; class method; blocks weak/strong self.

Invoking a class method, it should then eventually call `[self alloc]`
and not `[[self class] alloc]`  (being already invoked on the class). In
the init method, it is safer to copy `NSString` and `blocks`. Use weakSelf
(and eventually strongSelf) in blocks.