Rumah > Soal Jawab > teks badan
#import <Foundation/Foundation.h>
@interface Person :NSObject
{
int age;
NSString * name;
}
-(void)setAge:(int)age;
-(void) sayHi;
@end
@implementation Person
-(void)setAge:(int)age{
self.age=age;
}
-(void)sayHi{
NSLog(@"im jerry %d",age);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person* p=[Person new];
[p setAge:5];
[p sayHi];
}
return 0;
}
self.age=age;
这里报错了。
在java里面,不是this.age=age吗?oc里面难道不行吗?
大家讲道理2017-04-24 09:15:51
@property(copy) NSMutableArray *array;
Selepas atribut ini ditambahkan, ia kelihatan seperti pembolehubah Sebenarnya, pengkompil melakukan lebih daripada sekadar menambah pembolehubah:
Menambah pembolehubah global kelas NSMutableArray * _array
Kaedah Dapatkan Ditambah-(NSMutableArray *)tatasusunan;
Kaedah Set Ditambah-(void)setArray:(NSMutableArray *)array;
Walaupun kod anda tidak menggunakan @property
untuk menentukan atribut, ia tidak mempunyai nama kaedah yang sepadan dengan kaedah set
atribut itu, anda masih boleh menggunakan 点语法
apabila menggunakannya.
self.age=age;
[self setAge:age];
A dan B adalah setara! Selepas penyusunan, A akan ditukar kepada bentuk B, dan B akan ditukarkan lagi ke dalam bentuk panggilan fungsi C!
Anda memanggil -setAge:
dalam kaedah -setAge:
, menghasilkan rekursi tak terhingga. Jika anda perhatikan timbunan atur cara apabila ia ranap, anda akan dapati timbunan itu penuh dengan -setAge:
.
Jika anda ingin mengelakkan masalah ini, gunakan sahaja tugasan pembolehubah kelas secara langsung
_age = age;
天蓬老师2017-04-24 09:15:51
Penjelasan terperinci adalah seperti yang dinyatakan di atas, secara ringkasnya:
Sintaks titik dalam OC hanyalah ciri pengkompil, dan intipatinya masih kaedah panggilan.
高洛峰2017-04-24 09:15:51
Jangan gunakan sintaks titik di sini dan letakkan garis bawah di hadapan pembolehubah ahli anda untuk membezakannya. _umur = umur;
怪我咯2017-04-24 09:15:51
Ditulis di sini @antaramuka boleh digunakan terus tanpa menambah diri.
Hanya umur = umur