oc-25- @property @synthesize

s.h

#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    @public
    NSString *_name;
    int _age;
    int _height;
}

// @property能够自动生成set和get方法的 声明
// @property 成员变量类型 成员变量名称(去掉下划线);
//- (void)setName:(NSString *)name;
//- (NSString *)name;
@property NSString *name;
@end


s.m

/**
 问题:想要给自己不带下划线的成员变量进行赋值,怎么办?>

 需要给@synthesize指定,告诉该赋值给谁.
 @synthesize name = _name;
 它就知道,赋值_name;
 */


#import "Student.h"

@implementation Student
@synthesize name;
//生成了getset方法的实现
//- (void)setName:(NSString *)name
//{
//    name = name;
//    NSLog(@"%p",name);
//}
//- (NSString *)name
//{
//
// return name;
//}
@end


main.m

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *s = [Student new];
        s.name = @"亚索";
        // 这步能够调用,证明@property生成了set和get方法的声明.
        [s setName:@"亚索"];
        // 证明@synthesize生成了set和get方法的实现.
        NSLog(@"%p",s->name);
        NSLog(@"-----");
    }
    return 0;
}

@property增强使用

  • Xcode4.4版本以后支持的
  • 只使用 @property 进行声明,类自动帮你实现。
  • Xcode4.4以后property做了增强

    • 帮助我们自动生成get/set方法的声明
    • 帮助我们自动生成get/set方法的实现
s.h
/**
  @property的加强用法:
 1.生成set和get方法的声明
 2.生成set和get方法的实现
 3.生成带下划线的成员变量.
 
 注意事项:
 1. 当用户手动重写了set方法时,@property会生成get方法和带下划线的成员变量
 2. 当用户手动重写了set和get方法时.@property不会生成待下划线的成员变量.
 3. 当用户手动重写了get方法时,@property会生成set方法和带下划线的成员变量.
 
 */

#import <Foundation/Foundation.h>
#import "Person.h"

@interface Student : Person

@property NSString *name;//生成的变量名是_name,

@property int age;

@property int height;

@property int weight;

@end


s.m

#import "Student.h"

@implementation Student

//@synthesize age = _age,height = _height,weight = _weight,name = _name;

//手动重写get方法
- (NSString *)name
{
    return _name;
}


- (instancetype)init
{
    if (self = [super init]) {
        NSLog(@"s---%@",self);
        NSLog(@"s---%@",super.class);
    }
    return self;
}
@end
原文地址:https://www.cnblogs.com/yaowen/p/5311330.html