Rumah  >  Soal Jawab  >  teks badan

objective-c - 为什么这一段Objectc会报错?



#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里面难道不行吗?

阿神阿神2709 hari yang lalu690

membalas semua(4)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-24 09:15:51

    Dalam objektif-c, walaupun atribut dipanggil sebagai tugasan mudah dan operasi nilai, sebenarnya, penggunaan atribut adalah panggilan kaedah!

    Contohnya:

    @property(copy) NSMutableArray *array;
    Selepas atribut ini ditambahkan, ia kelihatan seperti pembolehubah Sebenarnya, pengkompil melakukan lebih daripada sekadar menambah pembolehubah:

    1. Menambah pembolehubah global kelas NSMutableArray * _array

    2. Kaedah Dapatkan Ditambah-(NSMutableArray *)tatasusunan;

    3. 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.

    A

    self.age=age;

    B

    [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;

    balas
    0
  • 天蓬老师

    天蓬老师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.

    balas
    0
  • 高洛峰

    高洛峰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;

    balas
    0
  • 怪我咯

    怪我咯2017-04-24 09:15:51

    Ditulis di sini @antaramuka boleh digunakan terus tanpa menambah diri.
    Hanya umur = umur

    balas
    0
  • Batalbalas