Object-C学习笔录(二)面向对象
来源:互联网 发布:淘宝百度快照优化 编辑:程序博客网 时间:2024/05/18 19:22
最近思路混乱了,一边要维护Android客户端;一边又要赶紧学OC维护IOS客户端;不多说了;下面先上提纲:
1.Object-C中类的定义
2.对象初始化:
3.方法以及方法调用
4.成员变量
5.合成getter/setter方法;
1.Object-C中类的定义
OC中所有的类默认继承NSObject基类
OC中类的定义包含两个部分:接口部分和实现部分,分别用一个"类名.h"文件和一个"类名.m"文件保存。
接口部分声明:
@interface User : NSObject
{
NSString*name;
NSString*identifier;
NSInteger age;
}
-(id)initWithName:(NSString*)name identifier:(NSString*)ident age:(NSInteger)age;//自定义的对象初始化方法,一般约定俗成使用init开头
-(void)test;
+(void)test2;
@end
实现部分:
#import "User.h"
@implementation User
{
NSString*pass;//在实现部分声明的变量默认为private权限
}
-(id)initWithName:(NSString *)n identifier:(NSString *)ident age:(NSInteger)a{
if(self=[superinit]){
self->name=n;
self->identifier=ident;
self->age=a;
}
NSLog(@"实现接口部分声明的对象初始化方法");
return self;
}
-(void)test{
NSLog(@"实现接口部分声明的实例对象方法 %@",self->name);
}
+(void)test2{
NSLog(@"实现接口部分声明的类方法 %@",self->name);
}
//类实现部分自定义的方法,权限只能被当前的类使用,外部无法使用,对外部为不可见性
-(NSString*)text{
return@"Andy";
}
@end
注意:Object-C中所有类的实例都是指针;
例如:User* user;//声明一个对象指针变量
user=[[User alloc]init];
关于init方法是Object-C类的默认初始化方法
或者使用user=[User new];
关于new方法也是Object-C默认的初始化方式
或者我们使用自己的初始化方法,user=[[User alloc] initWithName:@"Andy" identifier:@"4509234222222" age:27];
3.方法以及方法调用
Object-C中只有实例方法和类方法两种区别
以减号(➖)开头的方法都是实例方法;以加号(➕)开头的方法都是类方法
接口部分声明的方法对外部是可见的,也就是说外部可以调用;而类实现部分自定义的方法,权限只能被当前的类使用,外部无法使用,对外部为不可见性
在Object-C里面方法不能独立存在,必须属于某个类或者对象
方法调用,例如:
[user test];//调用实例方法
[User test2];//调用类方法
4.成员变量
Object-C中类的成员变量都是实例变量,Object-C中不支持真正的类变量;但是可以通过static修饰的全局变量可以模拟类变量
接口中@private 修饰的成员变量,只能被当前类访问;接口中声明的属性变量默认为@protected;被@protected修饰的成员变量,只能提供当前类及其子类可以使用,对非继承关系的外部是不可见的,若想声明一个属性变量为外部可见,则使用@public;或者@package;
@public表示所有外部文件都可以使用;即可见性指向所有外部文件;@package则是当前包内可见。
5.合成getter/setter方法;
合成getter/setter方法只是提供编程便利性,使程序员可以少写一点代码;
Object-C提供@property,@synthesize关键字修饰成员变量,使得系统会自动为该变量合成getter/setter方法;只要在类的接口部分声明变量时使用@property关键字修饰,在类的实现部分用@synthesize修饰对应变量即可;系统会默认合成setXxx的setter方法和xxx的getter方法;
例如
@interface User: NSObject
@property(nonatomic)NSString *name;
@property(nonatomic)NSString *pass;
@property(nonatomic)NSInteger age;
@end
如上的代码,系统会自动为name属性合成名为setName:(NSString* _name)的setter方法和名为name的getter方法,只管调用就是了。通过@property修饰的成员变量还可以通过“对象实例.属性”点语法方式获取属性值,或者赋值;其实点语法也是通过调用setter/getter实现的。今天先写到这里,下一篇应该记录一下Object-C的KVC和KVO方式操作对象属性变量。
- Object-C学习笔录(二)面向对象
- Object-c 面向对象(二)
- Object-C学习笔录(一)
- object-c 学习(面向对象)
- Object-C学习笔记二-----面向对象编程基础知识
- Object-C学习笔录(四)多线程编程
- Object-c面向对象(上)
- Object-c 面向对象(一)
- Object-c 面向对象(三)
- Object-c 面向对象(四)
- Javascript学习笔录7(学会用Object对象、属性、方法-1)
- object-c 学习(二)
- Object-C学习笔录(三)NSKeyValueCoding(KVC)协议与NSKeyValueObserving(KVO)协议
- object-c面向对象语言
- Object-C面向对象编程
- Object-C 面向对象基础
- Object-c 学习之面向对象的理解
- FIS3学习笔录二
- 求规定范围内的完美数
- Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法
- Iwpriv工作流程及常用命令使用
- Linux的最大文件数限制
- WordPress 数据库操作WPDB对象($wpdb)用法详解
- Object-C学习笔录(二)面向对象
- 《推荐系统》--最新进展:攻击、在线消费决策、普适环境、总结及经验
- ViewPager onPageChangeListener总结
- 面试题14:调整数组顺序使奇数位于偶数前面
- UVA - 1331(与几何相关dp)
- 解决magento 订单0元的情况
- eclipse jrebel 5.6.1 破解版配置
- Android项目打包apk及apk的反编译,xml的反编译
- C/C++文件操作