Iphone 使用自我功能
为什么使用self…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.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。