OC学习

OC学习1 设置器与访问器,以及property有关语法
1.Student.h

#import <Foundation/Foundation.h>


@interface Student :NSObject

{

    //实例变量

   NSString *_name;

   NSInteger _age;

    

   NSString *_companyAddress;

}


@propertyNSString *companyAddress;

//相当于声明了设置器和访问器


//设置器和访问器

-(void)setName:(NSString *)name;

-(NSString *)name;


-(void)setAge:(NSInteger)age;

-(NSInteger)age;



/*

 设置器和访问器的作用

 1.隐藏了实例变量

 2.控制实例变量的读写

 3.做正确性检验

 

 对于设置器和访问器来说,其命名规则:

 1.设置器:-(void)set首字母大写的实例变量名:(实例变量的返回值类型)去掉下划线的实例变量名

 2.访问器:-(实例变量的返回值类型)去掉下划线的实例变量名

 

 note:

    对于类的名称,其首字母大写;

    对于变量,其首字母小写;

    遵循驼峰命名规则

 

 缺点:

    手动编写麻烦

 */

@end


2.Student.m

#import "Student.h"


@implementation Student


-(void)setName:(NSString *)name{

    //网络请求

   _name = name;

}


-(NSString *)name{

   return  _name;

}


@synthesize companyAddress =_companyAddress;

//相当于设置器和访问器的实现,settergetter


@end


3.NewStudent.h

#import <Foundation/Foundation.h>


@interface NewStudent :NSObject

{

   NSString *_name;

   NSInteger _age;

}


@property (readonly)NSString *name;

@property (nonatomic,assign)NSInteger age;

@end


4.NewStudent.m

#import "NewStudent.h"


@implementation NewStudent


@synthesize name = _name;

@synthesize age = _age;

-(id)init{

   if(self = [superinit]){

       _name = @"XXX";

    }

    return  self;

}


-(void)setAge:(NSInteger)age{

    NSLog(@"你调用了我,%s",__FUNCTION__);//此处_FUNCTION_的作用为把函数名打印出来

   if(age < 18){

       _age = 18;

    }else{

       _age = age;

    }

}


@end


5.NewNewStudent.h

#import "NewNewStudent.h"


#import <Foundation/Foundation.h>


@interface NewNewStudent :NSObject

{

    

}


/*

 retain

 copy 

 assign

 

 strong

 weak

 

 如果是带*的一个对象类型,则可用retain,copy,strong

 但如果是基本数据类型,NSIteger,则用weak,assign

 */


//nonatomic:非多线程环境操作,atomic:多线程环境操作

//retain为内存管理的内容


@property (nonatomic,retain)NSString *name;

@property (nonatomic,assign)NSInteger age;

@end


6.NewNewStudent.m

#import "NewNewStudent.h"


@implementation NewNewStudent

//@synthesize name = _name;

//@synthesize age = _age;


//此处把@synthesize注释掉了,这时候系统会为我们自动产生以下划线开头的变量.所以在类实现文件的内部我们需要用_name来代替name,_age来代替age.


@end


7.main.m

#import <Foundation/Foundation.h>

#import "Student.h"

#import "NewStudent.h"

#import "NewNewStudent.h"


int main(int argc,const char * argv[])

{


    @autoreleasepool {

        

       Student *stu = [Studentnew];

        [stu setCompanyAddress:@"adsf"];

        NSLog(@"%@",[stucompanyAddress]);

        

        stu.companyAddress =@"zcx";

        NSLog(@"%@",stu.companyAddress);

        

        NewStudent *nstu = [NewStudentnew];

        //nstu.name = @"XXX";

        nstu.age = 17;

        

       NSLog(@"%@,%ld",nstu.name,nstu.age);

        

        NewNewStudent *nnstu = [NewNewStudentnew];

        

        nnstu.name =@"XXX";

        nnstu.age = 20;

       NSLog(@"%@,%ld",nnstu.name,nnstu.age);

    }

   return 0;

}


以上内容,仅为本人在上课时所听所感所看,如此错误,请指出.谢谢.
PS:第一次写博客.感觉还OK的就看一下吧~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值