OC语言02

 类和对象  
 - 对于对象  +对于类 
(id) 类似于C语言中的(void *) 泛指指针的返回地址

实例变量可见度 (了解)
public   公共的共有的      实例变量可以在类的外部和内部操作 访问方式可以通过 :对象 + 指向操作符 + 实例变量 例如: p->name;

protected  受保护的 默认的    实例变量只能在该本类和子类内部操作

private  私有的   实例对象只能在该类内访问,不可以在子类文件以及其他文件中访问.

实例变量定义在.h中 相当于先声明某一变量是某一类型的实例变量.  不设置可见度的时候,为默认的 受保护的 protected 定义方式  
      为什么不声明为@public :1. 外部就可以访问内部以及修改,会影响内部的一个实现,提供外部访问的接口. 2.违背了OC三大面向对象的思想——封装 隐藏内部实现,提供外界访问的借口.
     为什么不声明为@private :1.子文件访问不到,子文件还需另外声明.2.违背oc的继承父类有 子类就可以用
@public //单独
    
NSString *name;//姓名
    
@private//范围也为单独的
    
NSString *gender;//性别
    
@protected
    
NSInteger age;//年龄

@public //整体 作用范围为整体.
   NSString *name;//姓名
    
NSString *gender;//性别
    
NSInteger age;//年龄

类的定义
接口部分和文件实现部分都可以写在main.m里 但需要写在main函数的外面 相当于函数的声明和实现 函数与函数之间不可嵌套定义,所以必须在main函数外面
一个文件里可以有很多个类 只要符合 接口文件的声明和实现的框架就可以 和文件名没有关系 一般情况下 一个文件中就定义一个类 类的名字和文件同名
//.m
@implementation aa
@end 

//.h
 @interface aa : NSObject
 {
 NSString *name;
 NSString *sex;
 }
 @end

方法
命名规范 : 工程 所有单词的首字母都要大写    方法 第一个单词首字母不大写 以后所有单词的首字母都大写
//self 谁调用该方法,self就代表谁 可用于对象 也可用于类 当方法是一个减号(-)方法时 调用该方法的对象是谁 self就是当前对象 当方法是一个加号方法(+)时,调用该方法的类是谁 self就代表当前类 
加号方法即类方法 只能类使用 不能使用实例变量 实例变量是依托于对象存在的 只有有了对象 实例变量才会有效 比如给人类起个名字  但不知道给那个具体的对象赋名字


unknown type name “women”  意思:不能识别的类型women  解决方案: #import导入头文件时,会将头文件中的内容复制一份,在对象使用women这个类时,该类还未定义,所以识别不了.典型的循环导入问题.  解决方案 :使用该类时不能把它当做一个类来使用,所以在.h文件里使用@Class women;将women声明为一个字符串使用 ,但他不具有类中的内容,需要在.m里面#import “women.h”导入头文件  下面是具体的事例:
.n文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//实例变量的存在依托于对象
  
//NSString 是字符串的类 ( NSString *)表示对象
    
NSString *_name;//姓名
    
NSString *_gender;//性别
    
NSInteger _age;//年龄
}
//类的方法,即函数的声明,不一样的是oc的方法有对对象的和对类的
//打豆豆
+ (
void)fight;//针对与类的方法 不能有实例变量
- (
void)sayHi;//针对对象的方法.

//设置器方法 set开头的基本形式如下没有返回值 且只有一个参数 作用:为实例变量赋值.
//name赋值
- (
void)setName:(NSString *)name;
//gender赋值
- (
void)setGender:(NSString *)gender;
//age赋值
- (
void)setAge:(NSInteger)age;

//访问器 get方法 没有参数 有返回值 作用:给实例变量获取值
//读取_name的值
- (
NSString *)name;
//读取_gender的值
- (
NSString *)gender;
//读取_age的值
- (
NSInteger)age;

//自定义一个初始化方法 标识符 对象方法  + 类方法
- (
id)initWhitName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age;//实例方法 又称对象方法
//id OC里面所有的返回类型,相当于 void*
//初始化方法的方法名initWhitName:gender:age:中间不能有空格 冒号不能省略
@end
@interface Student : NSObject
{
    
NSString *name;
    
NSString *sex;
}
@end
@interface aa : NSObject
{
    
NSString *name;
    
NSString *sex;
}
@end
//一个文件里可以有很多个类 只要符合 接口文件的声明和实现的框架就可以 和文件名没有关系 一般情况下 一个文件中就定义一个类 类的名字和文件同名
.m文件
#import "Person.h"
@implementation Person
//打豆豆
+ (
void)fight{
   
NSLog(@"打豆豆");
}

- (
void)sayHi{
    
NSLog(@"name:%@,gender:%@,age:%ld",_name,_gender,(long)_age);
}
//name赋值的实现
- (
void)setName:(NSString *)name{
    
_name = name;
}
//规范的写法 _name 实例变量前加_ + 变量名
- (
void)setGender:(NSString *)gender{
    
_gender = gender;  
}

- (
void)setAge:(NSInteger)age{
    
_age = age ;
}
//读取_name的值
- (
NSString *)name{
    
return _name;
}

- (
NSString *)gender{
    
return _gender;
}

- (
NSInteger)age{
    
return _age;
}
//自定义一个初始化方法
- (
id)initWhitName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age{
    
_name  = name;
    
_gender = gender;
    
_age = age;
    
return self;
}
//self 谁调用该方法,self就代表谁 可用于对象 也可用于类
@end
main.m文件
#import  <Foundation/Foundation.h>
#import 
"Person.h"
#import 
“mobilePhone.h" 头文件的导入

int  main( int  argc,  const   char  * argv[])
{
    
@autoreleasepool  {
        
Person  *p = [[ Person   alloc init ]; // 开辟空间   初始化
        [p 
sayHi ]; //对于对象的方法实现
        [
Person  fight ]; //对于类的方法实现
        
Person  *xiaoMing = [[ Person   alloc init ]; // 开辟内存 , 并初始化
        [xiaoMing 
setName : @"duke" ]; // 字符串对象   需要 %@ 输出
        [xiaoMing 
setGender : @"female" ];
        [xiaoMing 
setAge : 20 ]; // 就是个简单地变量类型
        [xiaoMing 
sayHi ];
        
Person  *xiaoli = [[ Person   alloc ] initWhitName : @"frank"   gender : @"m"   age : 18 ]; // 调用初始化方法   自定义的
        [xiaoli 
sayHi ];    
    }
    
return   0 ;
}













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值