objective-c - 为什么这一段Objectc会报错?
阿神
阿神 2017-04-24 09:13:51
0
4
687


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

阿神
阿神

闭关修行中......

membalas semua(4)
大家讲道理

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

Penjelasan terperinci adalah seperti yang dinyatakan di atas, secara ringkasnya:
Sintaks titik dalam OC hanyalah ciri pengkompil, dan intipatinya masih kaedah panggilan.

小葫芦

Jangan gunakan sintaks titik di sini dan letakkan garis bawah di hadapan pembolehubah ahli anda untuk membezakannya. _umur = umur;

刘奇

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!