黑马程序猿_OC之核心语法(上)

这段时间比较忙,已经一个礼拜没有把学习心得及时记录下来了,看的OC核心语法与内存管理都没有来得及整理,现在把这部分知识整理一下,先来整理核心语法,这篇主要总结一下OC字符串、OC点语法、property与synthesize、id等小语法点

1.OC字符串

OC中的字符串也是对象,用指针变量来存放

#import<Foundation/Foundation.h>
int main()
{
NSString *str = @"itcast"; // 创建字符串
char *nameab = "itcast";  // c语言中的创建字符串
NSLog(@"%s",nameab);
NSLog(@"%@",str);  // OC字符串的输出格式符为%@

int age = 15;
int no = 5;
NSString *name = @"jack";

NSString *newStr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@",age,no,name]; // 第二种创建方法,调用了NSString的一个类方法 stringWithFormat: 字符串由其他类型的数据组合而成
NSLog(@"%@",newStr);

int size = [name length];
NSLog(@"%d",size);
NSLog(@"%ld",[newStr length]);  // 计算字符串的长度、个数,区别于内存中的字符数
return 0;
}

2.OC点语法

OC中的点语法不是直接给成员变量赋值,即不是通过成员变量名来赋值,OC中点语法的实质还是方法调用,编译器会自动将点语法转化成成员变量对应的set方法和get方法,详细使用及细节见下面代码:

#import <Foundation/Foundation.h>
@interface Person:NSObject
{
int _age;
NSString *_name;
}
- (void)setAge:(int)age;
- (int)age;<pre name="code" class="objc">- (void)setName:(NSString *)name;<pre name="code" class="objc">- (NSString *)name;

 @end@implementation Person- (void)setAge:(int)age{ _age = age; NSLog(@"setAge:"); }- (int)age{ NSLog(@"age"); return _age; }- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}@endint main(){ Person *p = [Person new]; p.age = 10; // [p setAge:10]; 不同于p->_age = 10, 点语法的本质还是方法调用,编译器会将其转化为set方法, int a = p.age; // int a = [p age]; 将p.age转化为get方法,而调用set方法与get方法的区别为:是否赋值了 return 0; 

 注意点:不能在setter和getter里面再次调用自身的setter和getter,例如在上面setter代码里面写self.age = age; 在getter里面写return self.age; 这样的写法会造成死循环,不断地调用setter和getter。 

3.成员变量的作用域

成员变量的作用域可以用几个关键字来限定,分别为:

@public    在任何地方都能直接访问对象的成员变量

@private  只能在当前类的对象方法中直接访问

@protected  能在当前类和子类的对象方法中直接访问,不加关键字的作用域默认为protected

@package  只要处于同一个框架中,就能直接访问对象的成员变量

对于不能直接访问的对象成员变量,就需要封装setter和getter来间接访问成员变量,例如private类型和protected类型的成员变量,要在main函数中访问就必须利用setter和getter,而protected类型的成员变量,可以在子类中直接访问,例如p -> age = 10; 

另外需要注意的是:方法的实现里面也可以写成员变量, 默认为私有的,因为.m文件一般不会被别的文件包含,所以写@public也没有用,但是如果把.m里面的内容与main函数放在同一源文件中,写@public是有用的,但是开发中很少人这么写;方法的实现里面的成员变量不能与@interface中重名

4.@property和@synthesize 

对于每个成员变量都封装setter和getter,成员变量一多,代码的重复性太大,繁琐;所以利用@property和@synthesize 来自动声明和实现成员变量的setter和getter。

@property可以自动生成某个成员变量的setter和getter的声明,用在@interface中;对于同类型的成员变量,可以合并写成:@property int age,no;
@property int age; 注意age不要加下划线 ,否则不符合setter和getter的命名规范,也会影响点语法的使用,此语句相当于:- (void)setAge:(int)age;   - (int)age;

@synthesize 可以自动生成某个成员变量的setter和getter的实现,并且访问成员变量,用在@implementation中
@synthesize age = _age;   _age是要访问的成员变量,如果在@interface中不存在成员变量,即没有声明成员变量,系统会自动生成@private类型的_age成员变量;如果写成@synthesize age;  会默认访问age这个成员变量,没有自动生成

随着Xcode的发展,可以利用@property声明成员变量,访问成员变量, 又可以声明跟实现setter、getter,实际的项目开发都写成下面这样,例如:

@interface Person:NSObject
@property int age; 
@end

但是如果在实现里开发自己写了setter 和getter,property不帮你生成不存在的成员变量;只要一个没有自己写,setter或者getter,property就会帮忙自动生成。

5.id

id是一种数据类型,万能指针,能操作任何的OC对象,定义在NSObject中,typedef声明中是指针类型,自带*,不能写*id

@interface Person:NSObject
@property int age;
@property id obj;
@end

@implementation Person
@end

int main()
{
  Person *p = [Person new];
  NSObject *o = [Person new];
  id d = [Person new];
  d.age = 10;
  NSLog(@"%d",d.age);

  d.obj = @"12131312";
  NSLog(@"%@",d.obj);
  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
黑马程序C学习讲义是一本针对C语言编程初学者而设计的教材。此讲义具有以下特: 首先,黑马程序C学习讲义的编写者是经验丰富的专业人士,他们对C语言具有深刻的理解和掌握。因此,讲义内容严谨而系统,涵盖了C语言的基础知识和核心概念。通过学习这本讲义,学习者能够逐步掌握C语言的语法、变量、运算符、控制流程等基础知识。 其次,黑马程序C学习讲义强调实践操作。学习者在学习每个知识时,都会有相应的实例进行演示和练习。这样设计能够帮助学习者更好地理解理论知识,并且能够及时发现和纠正自己的错误。通过实践操作,学习者能够提升自己的编程能力,更好地掌握C语言。 另外,黑马程序C学习讲义注重知识的渗透性。即讲义中所讲述的知识不仅仅是孤立的知识,而是与其他知识相互联系、相互补充的。这样设计有助于学习者更好地把握整体框架并建立正确的学习思路。 最后,黑马程序C学习讲义还提供了一些习题和实例来帮助学习者巩固所学的知识。通过实践和练习,学习者能够更深入地理解和掌握C语言,并且能够把所学到的知识运用到实际编程中。 总的来说,黑马程序C学习讲义是一本深入浅出、理论与实践相结合的教材。它的系统性、实用性和互动性都能够有效地帮助学习者掌握C语言编程的基础知识和技巧,是入门学习C语言的好助手。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值