Iphone 使用自我功能

Iphone 使用自我功能,iphone,objective-c,ios,memory-management,Iphone,Objective C,Ios,Memory Management,为什么使用self…self.something=manything的意思是什么主要区别在于不使用self调用将直接访问变量,通过self调用将调用set/get方法。区别是什么 因为在Objective-C中,当你做something=manything时,你需要小心记忆许多东西都附加到某个东西上,而以前附加到某个东西上的对象丢失 最好使用set方法,在设置新对象之前先释放旧对象。您可以记住,要设置某些内容,最好使用self.something 一个简单明了的例子: 1) 如果您这样做(假设

为什么使用self…
self.something=manything的意思是什么

主要区别在于不使用self调用将直接访问变量,通过self调用将调用set/get方法。区别是什么

因为在Objective-C中,当你做
something=manything时,你需要小心记忆许多东西都附加到某个东西上,而以前附加到某个东西上的对象丢失

最好使用set方法,在设置新对象之前先释放旧对象。您可以记住,要设置某些内容,最好使用
self.something


一个简单明了的例子:

1) 如果您这样做(假设myArray是一个属性):坏情况

NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil];
myArray = tmpArray;
第一行创建一个自动释放的数组,然后将该数组分配给myArray。如果myArray中有某个内容,则不会发布该内容,也不会保留新的数组。这将导致内存泄漏,并在之后尝试访问myArray时崩溃,因为自动释放的数组将被释放

2) 如果你这样做:很好的案例

NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil];
self.myArray = tmpArray; //Equivalent to [self setMyArray:tmpArray];
我们在这里调用accessor方法,如果需要,此方法将负责释放旧对象(无memomry泄漏),如果还需要,将保留新的assign对象(数组现在由我们的属性保留,可以在将来访问)


=>要继续,一切都是关于内存管理的。

无论何时设置变量的属性&如果您想访问我们通常使用的同一类中的属性

self.(ObjectName)    //for accessing getter & setter method.

另一个好处是,如果您想使用其他类中的任何对象,我们也可以使用它来合成该对象&创建该类的对象,我们可以访问该类的成员变量。

这是正确的,但您的答案假设某个对象是一个@property,没有显式iVar,或者显式iVar也被命名为某个对象,事实并非总是如此。在这种情况下,“self.something=foo;”表示“[self-setSomething:foo];”这是正在发送的Obj-C消息。”something=foo;'暗示“自我->某物=foo;”这是对iVar的直接赋值,绕过setter中的任何逻辑,因此绕过任何键值观察。如果使用KVO,则通常只希望在init方法和dealloc中直接访问iVar。