objective-c - OC 直接使用@property就能定义属性了吗?

 宁波南诚装饰_886 发布于 2022-10-25 01:32
#import 

@interface Person : NSObject


@property  NSString * name;


@end

这样就直接能使用p.name了。
好像不需要如下定义:

#import 

@interface Person : NSObject{
NSString* _name;

}


@property  NSString * name;


@end

这两种方式有啥区别呢?

2 个回答
  • 
    @property  NSString * name;
    // 这个等于下面的(编译器会自动帮你处理)
    
    
    //.h文件
    {
        NSString *_name;
    }
    // (线程处理方式, 内存操作方式)
    @property(atomic, copy)  NSString * name;
    
    // .m文件
    // 属性名对应的成员变量是
    @synthesize _name = name;
    
    2022-10-26 14:05 回答
  • 我的经验来说,建议是全部用property定义名字,这样能分清楚变量内存操作方式(多线程实在太少,可以忽略)。并且,对于我来说,这是更容易辨清全局变量的方法之一,在m文件中直接使用_name,可以快速理解这是全局变量。我认为,使用property来做全局变量是个非常好的习惯。另外,@freewolf这里讲到的synthesize其实可以省略。这里用一个简单的setter来举例。

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property (nonatomic,retain) NSString * name;
    
    @end
    
    #import "Person.h"
    
    @implementation Person
    //下一步可以省略
    @synthesize name = _name;
    
    -(void) setName:(NSString *)name
    {
        name = _name;
    }
    
    @end
    2022-10-26 14:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有