共同点:
都可以修饰对象类型的property, 不会增加其引用计数.
不同点:
1.出现时期, assign出现在ARC之前, weak出现在ARC之后;
2.可修饰的类型, assign既可以修饰对象, 又可以修饰基本类型, 而weak只能修饰对象;
3.安全性, assign修饰的对象在被销毁之后, 其指针依然存在, 容易导致野指针错误, 而weak修饰的对象销毁之后指针自动设置为nil, 不会发生危险.
总结:
在ARC时代, 应该用weak来表示弱引用, 比如代理对象, 而用assign来修饰基本数据类型, 比如int, float, double. 最后建议, 为了兼容64位CPU, 尽量避免使用C数据类型, 而应该使用Objective-C新增的数据类型, 如NSInteger, NSUInteger, CGFloat等等.