recherche

Maison  >  Questions et réponses  >  le corps du texte

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

#import <Foundation/Foundation.h>

@interface Person : NSObject


@property  NSString * name;


@end

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

#import <Foundation/Foundation.h>

@interface Person : NSObject{
NSString* _name;

}


@property  NSString * name;


@end

这两种方式有啥区别呢?

ringa_leeringa_lee2804 Il y a quelques jours472

répondre à tous(2)je répondrai

  • 天蓬老师

    天蓬老师2017-04-24 09:16:09

    D'après mon expérience, il est recommandé d'utiliser la propriété pour définir tous les noms, afin que la méthode de fonctionnement de la mémoire variable puisse être clairement distinguée (le multithreading est trop rare et peut être ignoré). Et, pour moi, c'est l'un des moyens les plus simples d'identifier les variables globales. Utiliser _name directement dans le fichier m permet de comprendre rapidement qu'il s'agit d'une variable globale. Je pense que c'est une très bonne habitude d'utiliser des propriétés comme variables globales. De plus, la taille de synthèse mentionnée par @freewolf ici peut en fait être omise. Voici un simple setter à titre d'exemple.

    #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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-24 09:16:09

    
    @property  NSString * name;
    // 这个等于下面的(编译器会自动帮你处理)
    
    
    //.h文件
    {
        NSString *_name;
    }
    // (线程处理方式, 内存操作方式)
    @property(atomic, copy)  NSString * name;
    
    // .m文件
    // 属性名对应的成员变量是
    @synthesize _name = name;
    

    répondre
    0
  • Annulerrépondre