在面向对象程序里,一个对象不要直接访问另一个对象内部的数据。所以我们使用accessor methods来进行对象内部的数据交互。
accessor methods(getters and setters) are used as an abstraction for interacting with the object’s underlying data.
retain就是MRC版的strong
The retain
attribute is the Manual Retain Release version of strong
, and it has the exact same effect: claiming ownership of assigned values. You shouldn’t use this in an Automatic Reference Counted environment.
那么assign就是iOS5版本前的weak
The assign Attribute
The assign
attribute doesn’t perform any kind of memory-management call when assigning a new value to the property. This is the default behavior for primitive data types, and it used to be a way to implement weak references before iOS 5
This relinquishes ownership of the object immediately after creating it, but keeps it in memory long enough for the caller to interact with it. Specifically, it waits until the end of the nearest @autoreleasepool{}
block, after which it calls a normal release
method. This is why there’s always an @autoreleasepool{}
surrounding the entire main()
function—it makes sure all of the autoreleased objects are destroyed after the program is done executing.
Setter methods can have additional side-effects. They may trigger KVC notifications, or perform further tasks if you write your own custom methods.
weak property自动设置为nil,如果指向的对象dealloc.
To avoid a dangerous dangling pointer to the memory originally occupied by the now deallocated object, a weak reference is automatically set to nil
when its object is deallocated.