探究@property、@synthesize、@dynamic、readonly在类、分类、协议中的作用

@protocol StudentProtocol

/**
 在类里只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, assign) NSInteger age;

@end

@interface Student : NSObject <StudentProtocol>

//打印日志
+ (void)printTestInfo;

/**
 1.生成属性name
 2.生成name的setter、getter方法的声明
 3.生成name的setter、getter方法的实现
 4.生成_name成员变量
 */
@property (nonatomic, strong) NSString *name;

/**
 同时重写属性的setter、getter
 系统将不会自动生成成员变量
 */
@property (nonatomic, assign) CGFloat height;

/**
 系统会自动生成_weight和getter方法
 */
@property (nonatomic, assign, readonly) CGFloat weight;

/**
 @synthesize emil;
 生成属性sex的成员变量emil(注意没有下划线)和setter、getter方法的实现
 */
@property (nonatomic, strong) NSString *emil;

/**
 @synthesize tel=_tel;
 生成属性tel的成员变量_tel和setter、getter方法的实现
 */
@property (nonatomic, strong) NSString *tel;

/**
 @dynamic sex
 只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, assign) BOOL sex;

- (void)studying;

@end

@interface Student (Category)

/**
 只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, strong) NSString *address;

@end

github地址:https://github.com/jiliuliu/FoundationOC

原文地址:https://www.cnblogs.com/six6/p/8213785.html

时间: 2024-09-28 21:56:05

探究@property、@synthesize、@dynamic、readonly在类、分类、协议中的作用的相关文章

property synthesize dynamic 的不同和区别

property:只是对getter和setter方法进行了声明,其他的什么也没有干. synthesize:主要是对getter和 setter方法进行了实现,并且自动把你添加实例变量如果没有实例变量的话.实现主要是根据property特性的设置,例如property设置特性为 copy(retain).readonly.assgin等. dynamic:主要是告诉编译器说 不要给我生成 实例变量.getter.setter方法.我要自己生成.如果你没有自己生成当你在调用getter或者set

IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、 @synthesize、@property、@dynamic

IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic.                     @synthesize.@property.@dynamic #synthesize关键字: 根据@property设置,自动生成成员变量相应的存取方法,从而可以使用点操作符来方便的存取该成员变量 . @implementation 关键字,表明类的实现 @end 结束 self 关键字 :类似于java中的t

OC语言@property @synthesize和id

一.@property @synthesize 这两个关键字是编译器特性,让xcode可以自动生成gettersetter的声明和实现. (一)@property  @property 关键字可以自动生成某个成员变量的settergetter方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize @synthesize关键字帮助生成成员变量的setterge

object-c中@property @synthesize的用法

在objective-c中,我们可以用new简单的代替alloc init,我们今天介绍的是类似于new这种简易用法的另一种OC特性,用@property,@synthesize来代替get,set方法,用起来很简单,可以省掉很多的代码量,当需要用SET,GET方法的地方,我们可以用@property,@synthesize来简单的代替,这时系统会自动给我们生成该变量的set,get方法,@property对应方法的声明部分,@synthesize对应方法的实现部分. Human.h: [pla

成员变量的作用域,@property,@synthesize

成员变量的作用域 public:在任何地方都能直接访问对象的成员变量 private:只能在当前类的对象方法中直接访问(@implement中默认的) protected:可以在当前类及其子类的对象方法中直接访问(@interface中默认的) package:只要处在同一框架中,就能直接访问对象的成员变量 @property,@synthesize @property:可以自动生成某个成员变量的setter.getter方法: @synthesize:自动生成成员变量的setter.gette

「OC」@property @synthesize和id

一.@property @synthesize关键字 这两个关键字是编译器特性,让Xcode可以自动生成getter和setter. (一)@property 关键字 @property 关键字可以自动生成某个成员变量的setter和getter的声明 如:@property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize关键字 @synthesize关键字帮助生成成员变量的set

Objective-C基础之@synthesize, @dynamic

Objective-C基础之@synthesize, @dynamic OC属性用一个表达式最能清楚的解释其实质:property = ivar + setter+getter,也就是说一个属性是由实例变量+setter方法+getter方法组成.那么现在编译器帮我们做了这件事,在很早之前的版本中需要我们手动合成,那么@synthesize property=ivar这种形式的合成.我们知道,什么情况下编译器不会自动给我们合成属性: 同时实现setter.getter方法的时候,系统不会再合成i

将SVM用于多类分类

转自:http://www.lining0806.com/%E5%B0%86svm%E7%94%A8%E4%BA%8E%E5%A4%9A%E7%B1%BB%E5%88%86%E7%B1%BB/ SVM是一种典型的二类分类器,是采用最大间隔化策略来确定特征空间中最优超平面的,也就是说它只能回答属于正类还是负类的问题.而现实中要解决的往往是多类分类问题,如何将一个二类分类器转换成一个多类分类器呢? 一.一对多方法 比如有k个类别,每次分类都把1个类别作为正样本,其余k-1个类别作为负样本,依次类推.

@property @synthesize 对着set方法和get方法

@property @synthesize 这两个的作用是代替set和get方法: @property int age;代替下面两句 - (void)setAge:(int)age; - (int)age; 作用: 自动生成某个成员变量的setter和getter声明: @property double weight; @property NSString *name; 现在需要到实现中去实现: 使用@synthesize age;会把age property这些声明进行实现: @synthes