黑马程序员- oc中点语法和@property的使用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

点语法

其实就是set方法和get方法

#import<Foundation/Foundation.h>

@interface Person : NSObject

{

int _age;

}

- (void)setAge:(int)age;

- (int)age;

@end

@implementation Person

- (void)setAge:(int)age

{

    _age = age;  

    // 会引发死循环

    //self.age = age; // [self setAge:age];

}

- (int)age

{

return _age;

    // 会引发死循环

    //return self.age;// [self age];

}

@end

int main()

{

    Person *p = [Person new];

    // 点语法的本质还是方法调用

p.age = 10; // [p setAge:10];

int a = p.age; // [p age];

NSLog(@"%d", a);

return 0;

}

成员变量的作用域

@public : 在任何地方都能直接访问对象的成员变量

@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

@protected : 可以在当前类及其子类的对象方法中直接访问(@interface中默认就是@protected)

@package : 只要处在同一个框架中,就能直接访问对象的成员变量 //很少用

@interface和@implementation中不能声明同名的成员变量

@property  @synthesize

@property会自动生成set方法和get方法

#import<Foundation/Foundation.h>

@interface Person : NSObject

{

int _age;

NSString *_name;

}

// @property:可以自动生成某个成员变量的setter和getter声明

@propertyint age;

//相当于下面两行代码

//- (void)setAge:(int)age;

//- (int)age;

@propertyNSString *name;

@end

在实现中

@implementation Person

// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量

@synthesize age = _age;

@synthesize name = _name;

@end

@synthesize height = _height;  会访问height这个成员变量,如果不存在,会自动生成@private了类型的成员变量(@private,子类不能访问)

缺点:成员变量变成私有的,如果想子类访问,提前定义成员变量

其实通过@property int height;

就可以

生成get方法和set方法

生成 _height成员变量

生成get方法和set方法的实现

@property 独揽了@synthesize的功能,

如果在声明由set方法那么只会帮助实现get方法,如果是手动实现的,编译器不会帮助自动生成

时间: 2024-10-31 22:23:51

黑马程序员- oc中点语法和@property的使用的相关文章

黑马程序员————OC中点语法、id类型和构造方法

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- id:万能指针(内部已经包含*),能指向任何OC对象,只能使用于OC对象   id == NSObject * 构造方法:用来初始化对象的方法,是个对象方法,而且减号开头   init 完整地创建一个可用的对象 1.分配存储空间    +

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员—OC点语法和成员变量作用域

一.点语法 1.OC中点语法是方便从事别的语言开发的程序员迅速的转到OC开发当中,先看下面这个例子: 1 // 声明一个Person类 2 @interface Person : NSObject 3 { 4 int _age; 5 NSString *_name; 6 } 7 - (void)setAge:(int)age; 8 - (int)age; 9 @end 10 11 // 实现Person类 12 @implementation Person 13 - (void)setAge:(

黑马程序员— OC基本语法、类和对象、三大特性

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC开发Mac OS X平台和IOS平台的应用程序.简单的介绍了一下OC,下面我们来看看OC的基本语法,学习OC之前我们先学习了C语言,因为OC是在C语言的基础上的一门开发语言,因此OC的很多基本语法

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

黑马程序员-OC基本语法

OC是C系列语言,是面向对象的语言,而C语言是面向过程的,那么首先要理解面向对象和面向过程的区别. 面向过程是专注“事件”本身,这件事从发生到结束的行为.例如怎么把大象装进冰箱,面向过程的思想是这样的,首先打开冰箱门,把大象装进去,然后把冰箱门关上.而面向对象是专注于“事物”本身的,同样是装大象,面向对象的思想是这样的,什么东西能装大象去,找到能装大象的冰箱嘛~~~~ 面向对象有2个非常重要的概念,类和对象.首先要有类,就是对象的模板,然后用类来创建对象,OC中的语法是这样的: 1 #impor

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

【黑马程序员】————面向对象语法2

一.      set方法和get方法 1.          set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 成员变量尽量不要用@public 2.          set方法 1)       作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)       命名规范: 1> 方法名必须以set开头 2> set后面