[关闭]
@whiteiOS 2017-04-10T03:02:57.000000Z 字数 1513 阅读 2227

Protocol和Category中如何使用@property

iOS学习之路


(一)protocol

Person.h

  1. //设置协议,添加property
  2. #import <Foundation/Foundation.h>
  3. @protocol personDelegate <NSObject>
  4. @property (nonatomic, copy) NSString *name;
  5. @end
  6. @interface Person : NSObject
  7. @end

Student.h

  1. //遵守Person的协议,并声明实例变量
  2. #import <Foundation/Foundation.h>
  3. #import "Person.h"
  4. @interface Student : NSObject <personDelegate>
  5. {
  6. NSString *_name;
  7. }
  8. @end

Student.m

  1. //实现setter和getter
  2. //有两种方法:自动实现和手动实现
  3. //------------------自动----------------------//
  4. @implementation Student
  5. @synthesize name;
  6. @end
  7. //------------------手动----------------------//
  8. @implementation Student
  9. - (void)setName:(NSString *)name
  10. {
  11. _name = name;
  12. }
  13. - (NSString *)name
  14. {
  15. return _name;
  16. }
  17. @end

ViewController.m

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. Student *s = [[Student alloc] init];
  4. s.name = @"123";
  5. NSLog(@"%@", s.name);
  6. }

打印正确

(二)category

NSObject+Extension.h

  1. @interface NSObject (Extension)
  2. @property NSString *name;
  3. @end

NSObject+Extension.m

  1. @implementation NSObject (Extension)
  2. - (void)setName:(NSString *)name
  3. {
  4. //参数一:给谁添加属性
  5. //参数二:属性名称
  6. //参数三:属性值
  7. //参数四:保存策略
  8. objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  9. }
  10. - (NSString *)name
  11. {
  12. return objc_getAssociatedObject(self, @"name");
  13. }
  14. @end

ViewController.m

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. NSObject *objc = [[NSObject alloc] init];
  4. objc.name = @"123";
  5. NSLog(@"%@", objc.name);
  6. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注