Objective-C—self 、super、点语法、成员变量的作用域、@property和@synthesize、id
2015-04-04 14:16
549 查看
---关键字:self
self的用途:
1>概念:指向了当前对象(方法调用者),谁调用了当前方法,self就代表谁
*self出现在对象方法中,self就代表对象
*self出现在类方法中,self就代表类
2>可以利用”self->成员变量名“访问当前对象内部的成员变量
3>[self 方法名]可以调用其他对象方法\类方法
#import<Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
- (void)test;
@end
@implementation Person
- (void)setAge:(int)age
{
//_age = age;
self->_age = age;
}
- (int)age
{
return self->_age;
}
- (void)test
{
//self:指向了方向调用者,代表着当前对象
int _age = 20;
NSlog(@"Person的年龄是%d",self->_age);
}
@end
int main()
{
Person *p = [Person new];
[p setAge:10]
return 0;
}
self方法能够造成死循环,在使用的时候一定要分清类方法和对象方法的名称
---关键字super
/*super的作用
1.直接调用父类中的某个方法
2.super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
3.使用场合:子类重写父类的方法时想保留父类的一些行为
*/
#import<Foundation/Foundation.h>
@interface Zoombie : NSObject
- (void)walk;
@end
@implementation
- (void)walk
{
NSLog(@"僵尸走了两步");
}
@end
/*****子类*****/
@interface JumpZoombie : Zoombie
- (void)walk;
@end
@implementation
- (void)walk
{
NSLog(@"跳两下");
//走两下(直接调用父类的walk方法)
[super walk];
}
@end
---多文件开发 .h和 .m文件的分工
1.定义一个类分2个文件: .h声明文件、.m实现文件
.h :成员变量、方法的声明
.m :方法的实现
2.如果想使用某一个类,只需要#import类的 .h文件即可
---点语法
Person *p = [Person new];
//点语法的本质还是方法调用
p.age = 10; // [p setAge:10];
int a = p.age; // [p age];
return 0;
---成员变量的作用域
1.作用域类型
1>@public :在任何地方都能直接访问对象的成员变量
2>@private :只能在当前类的对象方法中直接访问(@implementation中默认是@private)
3>@protected :可以在当前类及其子类的对象方法中直接访问
(在@interface中默认为 @protected)
4>@package :只要处在同一个框架中,就能直接访问对象的成员变量
2.
1>在implementation中也可以声明成员变量,但是 implementation一般放在别的.h文件中,以至于系统根本看不到其中成员变量的存在,以及他的作用域,导致没有什么用,所以不提倡这样做。
2>@interface和@implementation中不能声明同名的成员变量
---@property和@synthesize
1.@property:可以自动生成某个成员变量的setter和getter声明
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
// @property:可以自动生成某个成员变量的setter和getter声明
@property int age;(代替了以下两行代码)
//- (void)setAge:(int)age;
//- (int)age;
@end
2.@synthesize:自动生成age的setter和getter实现,并且会访问_age这个成员变量
@implementation Person
// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量
@synthesize age = _age; // (代替了下面的一大坨实现setter和getter声明)
//- (void)setAge:(int)age
//{
// _age = age;
//}
//- (int)age
//{
// return _age;
//}
@end
3.在定义类的时候可以不声明成员变量,@synthesize 会自动生成
例如:
@implementation Car
//@synthesize speed = _speed, wheels = _wheels;
// 会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量
@synthesize speed = _speed;
再例如:
@implementation Cat
// 默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量
@synthesize age;
4.在程序中最精简的可以适用一句@property int age 来代替成员变量 _age(编译器会默认生成 _age这个成员变量)的声明和它的setter和getter方法的声明和实现
5.@synthesize的一些细节
1>@synthesize age = _age;
setter和getter实现中会访问成员变量 _age,如果成员变量 _age不存在,就会自动生成一个@private的成员变量 _age.
2>@synthesize age;
setter和getter实现中会访问成员变量 age,如果成员变量 age不存在,就会自动生成一@private的成员变量 age.
3>手动实现
*若手动实现了setter方法,编译器就只会自动生成getter方法
*若手动实现了getter方法,编译器就只会自动生成setter方法
*若同时手动实现了setter方法和getter方法,编译器就不会自动生成不存在的成员变量
---关键字id
id
1.万能指针,能指向任何OC对象,相当于NSObject *
2.id后面不要加上 *
3. id p = [Person new]; == Person p = [Person new];
注意:如果用id调用一个不存在的方法,编译器会马上报错
self的用途:
1>概念:指向了当前对象(方法调用者),谁调用了当前方法,self就代表谁
*self出现在对象方法中,self就代表对象
*self出现在类方法中,self就代表类
2>可以利用”self->成员变量名“访问当前对象内部的成员变量
3>[self 方法名]可以调用其他对象方法\类方法
#import<Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
- (void)test;
@end
@implementation Person
- (void)setAge:(int)age
{
//_age = age;
self->_age = age;
}
- (int)age
{
return self->_age;
}
- (void)test
{
//self:指向了方向调用者,代表着当前对象
int _age = 20;
NSlog(@"Person的年龄是%d",self->_age);
}
@end
int main()
{
Person *p = [Person new];
[p setAge:10]
return 0;
}
self方法能够造成死循环,在使用的时候一定要分清类方法和对象方法的名称
---关键字super
/*super的作用
1.直接调用父类中的某个方法
2.super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
3.使用场合:子类重写父类的方法时想保留父类的一些行为
*/
#import<Foundation/Foundation.h>
@interface Zoombie : NSObject
- (void)walk;
@end
@implementation
- (void)walk
{
NSLog(@"僵尸走了两步");
}
@end
/*****子类*****/
@interface JumpZoombie : Zoombie
- (void)walk;
@end
@implementation
- (void)walk
{
NSLog(@"跳两下");
//走两下(直接调用父类的walk方法)
[super walk];
}
@end
---多文件开发 .h和 .m文件的分工
1.定义一个类分2个文件: .h声明文件、.m实现文件
.h :成员变量、方法的声明
.m :方法的实现
2.如果想使用某一个类,只需要#import类的 .h文件即可
---点语法
Person *p = [Person new];
//点语法的本质还是方法调用
p.age = 10; // [p setAge:10];
int a = p.age; // [p age];
return 0;
---成员变量的作用域
1.作用域类型
1>@public :在任何地方都能直接访问对象的成员变量
2>@private :只能在当前类的对象方法中直接访问(@implementation中默认是@private)
3>@protected :可以在当前类及其子类的对象方法中直接访问
(在@interface中默认为 @protected)
4>@package :只要处在同一个框架中,就能直接访问对象的成员变量
2.
1>在implementation中也可以声明成员变量,但是 implementation一般放在别的.h文件中,以至于系统根本看不到其中成员变量的存在,以及他的作用域,导致没有什么用,所以不提倡这样做。
2>@interface和@implementation中不能声明同名的成员变量
---@property和@synthesize
1.@property:可以自动生成某个成员变量的setter和getter声明
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
// @property:可以自动生成某个成员变量的setter和getter声明
@property int age;(代替了以下两行代码)
//- (void)setAge:(int)age;
//- (int)age;
@end
2.@synthesize:自动生成age的setter和getter实现,并且会访问_age这个成员变量
@implementation Person
// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量
@synthesize age = _age; // (代替了下面的一大坨实现setter和getter声明)
//- (void)setAge:(int)age
//{
// _age = age;
//}
//- (int)age
//{
// return _age;
//}
@end
3.在定义类的时候可以不声明成员变量,@synthesize 会自动生成
例如:
@implementation Car
//@synthesize speed = _speed, wheels = _wheels;
// 会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量
@synthesize speed = _speed;
再例如:
@implementation Cat
// 默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量
@synthesize age;
4.在程序中最精简的可以适用一句@property int age 来代替成员变量 _age(编译器会默认生成 _age这个成员变量)的声明和它的setter和getter方法的声明和实现
5.@synthesize的一些细节
1>@synthesize age = _age;
setter和getter实现中会访问成员变量 _age,如果成员变量 _age不存在,就会自动生成一个@private的成员变量 _age.
2>@synthesize age;
setter和getter实现中会访问成员变量 age,如果成员变量 age不存在,就会自动生成一@private的成员变量 age.
3>手动实现
*若手动实现了setter方法,编译器就只会自动生成getter方法
*若手动实现了getter方法,编译器就只会自动生成setter方法
*若同时手动实现了setter方法和getter方法,编译器就不会自动生成不存在的成员变量
---关键字id
id
1.万能指针,能指向任何OC对象,相当于NSObject *
2.id后面不要加上 *
3. id p = [Person new]; == Person p = [Person new];
注意:如果用id调用一个不存在的方法,编译器会马上报错
相关文章推荐
- OC_NSString,点语法,成员变量作用域,@property和@synthesize,id笔记
- 【Objective-C学习笔记】核心语法——实例变量作用域、关键字@property和@synthesize
- OutMan——Objective-C中成员变量的作用域、@property和@synthesize介绍和使用、构造方法和自定义构造方法
- objective-c--- 成员变量作用域、@property、@Synthesize、id、重写,自定义构造方法
- 黑马程序员——OC语言------NSString、多文件开发、点语法、成员变量的作用域、@property和@synthesize
- OC之点语法、成员变量作用域、@property和@synthesize
- OC核心语法之NSString、点语法、成员变量作用域、@property和@synthesize
- 黑马程序员——OC语言学习——Xcode开发初始化、点语法、成员变量作用域、关键字@property和@synthesize
- OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数
- 黑马程序员——OC基础---核心语法(点语法,成员变量的作用域,@property和@synthesize)
- OC基础---NSString、多文件开发、点语法、成员变量的作用域、@property和@synthesize
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- 黑马程序员_iOS开发之OC之面向对象之多文件操作、点语法、成员变量的作用域和关键字@property与@synthesize
- OC笔记10(成员变量默认值,alloc和init)笔记11(对象的初始化与self)12(id类型与super关键字)
- Objective-C语言-点语法和变量作用域-@property @synthesize和id
- 【Objective-C】09-OC中的点语法和成员变量的作用域
- [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域
- [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域
- 黑 马 程 序 员_视频学习总结<Objective-C>----03 self、NSString、@property和@synthesize、id