OC---特有语法1

深入理解Objective-C中的对象属性操作与管理

特有语法1

---------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------------


一、利用点语法替换set方法和get方法
   1. 方法调用 
   Student *stu = [Student new];
   [stu setAge:10];
   int age = [stu age];
   这是set和get的对象调用方法
   2、点语法
   stu.age = 10;
   int age = stu.age;
   这就是点语法,点语法的实质还是方法调用
   当使用点语法时,编译器会自动展开成相应的方法 ,即:
   stu.age = 10;
   相当于[stu setAge :10];
   3、常见错误
   - (void) setAge:(int)age {
    self.age = age;//  [self setAge : age]
   }
   - (int) age {
    return self.age;//  [self age]
    } 
  以上代码会发生死循环;
二,作用域
    局部变量、全局变量都有自己的作用域,成员变量也不例外
    @private:只能在当前类的对象方法中直接访问
    @protected:可以在当前类以及子类的对象方法中直接访问
    @public:任何地方都可以直接访问
    @package:同一个“体系内”(框架)可以访问,介于@private和@public之间
三、@property
    用在@inteface中
    用来自动生成setter和getter的声明
    用@property int age;
就可以代替下面的两行
    - (int)age;                  //getter
    -  (void)setAge:(int)newAge;  //setter
    @interface Person :NSObject
    {
       int _age;
    }
    - (int)age;  
    -  (void)setAge:(int)newAge; 
    @property int age;
    @end;
四、@synthesize
    用在@implementation中
    用来自动生成setter和getter的实现
    用@synthesize age = _age;
就可以代替 
    -(int)age{
       return _age
    }
    -(void)newAge :(int)age{
       _age = age;
    }
注意:
    @synthesize age = _age;
    setter和getter实现中会访问成员变量_age 
    如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
    @synthesize age;
    setter和getter实现中会访问成员变量age 
    如果成员变量age不存在,就会自动生成一个@private的成员变量age
    手动实现
    若手动实现了setter方法,编译器就只会自动生成getter方法
    若手动实现了getter方法,编译器就只会自动生成setter方法
    若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量 
自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现
五、id
    万能指针,能指向任何OC对象,相当于NSObject *
    id类型的定义
    typedef struct objc_object {
         Class isa;
    } *id; 
    id p = [Person new]; //注意id后不加*号;
六、对象的创建原理
   1.new的两部曲:
   1)分配内存(+alloc)
   2)初始化(-init)
   Person *p1 = [Person alloc];
   Person *p1 = [p1 init];
   合成一句后:
   Person *p = [[Person alloc] init];
   2,init方法的重写
   在对象创建完毕后,成员变量马上就有一些默认的值
    - (id)init
   {
    if (self = [super init])
    {
        _age = 10;
    }
    return self;
   } 
   3、自定义的构造方法
   构造方法的一些规范:
    返回值是id类型
    方法名都以init开头
    - (id)initWithAge:(int)age {
    if (self = [super init]) {
        _age = age;
    }
      return self;
    }
七、多文件编程
   每个类分布在不同文件中
   类的声明放在.h文件,类的实现放在.m文件
   若想使用某个类,就包含某个类的.h声明文件


---------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------------

























学生社团系统-学生社团“一站式”运营管理平台-学生社团管理系统-基于SSM的学生社团管理系统-springboot学生社团管理系统.zip-Java学生社团管理系统开发实战-源码 更多学生社团系统: SpringBoot+Vue学生社团“一站式”运营管理平台源码(活动管理+成员考核+经费审批) Java学生社团管理系统开发实战:SSM升级SpringBoot(招新报名+场地预约+数据看板) 基于SpringSecurity的社团管理APP(移动端签到+权限分级+消息推送) 企业级社团数字化平台解决方案(SpringBoot+Redis缓存+Elasticsearch活动搜索) 微信小程序社团服务系统开发(活动直播+社团文化墙+成员互动社区) SpringBoot社团核心源码(多角色支持+工作流引擎+API接口开放) AI赋能社团管理:智能匹配兴趣标签+活动热度预测+成员贡献度分析(附代码) 响应式社团管理平台开发(PC/移动端适配+暗黑模式+无障碍访问) 完整学生社团系统源码下载(SpringBoot3+Vue3+MySQL8+Docker部署) 高校垂直领域社团平台:百团大战系统+社团星级评定+跨校活动联盟 适用对象:本代码学习资料适用于计算机、电子信息工程、数学等专业正在做毕设的学生,需要项目实战练习的学习者,也适用于课程设计、期末大作业。 技术栈:前端是vue,后端是springboot,项目代码都经过严格调试,代码没有任何bug! 核心管理:社团注册、成员管理、权限分级 活动运营:活动发布、报名签到、场地预约 资源服务:经费申请、物资管理、文档共享 数据分析:成员活跃度、活动效果评估、社团影响力排名
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值