OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字

2023-11-11

Person.h

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #ifndef oc_Person_h  
  2. #define oc_Person_h  
  3.   
  4. @interface Person : NSObject  
  5. {  
  6.     int age;  
  7. @protected  
  8.     float height;  
  9. }  
  10. - (int) age; //get方法  
  11. - (void) setAge:(int)pAge;  //set方法  
  12.   
  13. @end  
  14.   
  15. #endif  

Person.m

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #import <Foundation/Foundation.h>  
  2. #import "Person.h"  
  3. @implementation Person  
  4.   
  5. - (int) age  
  6. {  
  7.     return age;  
  8. }  
  9.   
  10. - (void) setAge:(int)pAge  
  11. {  
  12.     age = pAge;  
  13. }  
  14.   
  15. @end  

main.m

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. int main()  
  2. {  
  3.     Person* per = [[Person alloc] init];  
  4.     int age = [per age]; //调用get方法  
  5.     [per setAge:16]; //调用set方法  
  6.       
  7.     //使用“.” 来调用get/set  使用的都是原始变量名,这就要求变量的get、set都符合约定  
  8.     int age2 = per.age//get  
  9.     per.age = 17//set  
  10.       
  11.     return 0;  
  12. }  

每次这样写get/set方法,很麻烦,OC有一个自动化的方法,即使用 @proterty @synthesize 关键字

Person.h

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #ifndef oc_Person_h  
  2. #define oc_Person_h  
  3.   
  4. @interface Person : NSObject  
  5. {  
  6.     int age;  
  7. @protected  
  8.   //  float height;  
  9. }  
  10. //- (int) age;  
  11. //- (void) setAge:(int)pAge;  
  12.   
  13. @property int age; //编译器自动解释成 int age的get/set方法 的声明。  
  14. //@property int age = _age;//如果没有指定成员变量名,实现中默认访问的同名的成员变量age  
  15. @property float height;  //如果height没有声明,而用在这里, 也会自动生成以height为标准名的 get/set方法  
  16. @end  
  17.   
  18. #endif  

Person.m

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #import <Foundation/Foundation.h>  
  2. #import "Person.h"  
  3. @implementation Person  
  4.   
  5. //- (int) age  
  6. //{  
  7. //    return age;  
  8. //}  
  9. //  
  10. //- (void) setAge:(int)pAge  
  11. //{  
  12. //    age = pAge;  
  13. //}  
  14. @synthesize age; //编译器自动解释成 age的get、set方法实现。  在xcode4.5之后可以不写这句话  
  15. @synthesize height = _height; //如果_height不存在,会生成一个私有的_height变量  
  16. @end  


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字 的相关文章

  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • iOS 上每个选项的带有图像的操作表

    有没有办法在 iOS 上将图像添加到操作表中 与苹果在应用程序商店或苹果音乐应用程序上所做的一样 我对苹果文档的基本搜索表明我没有在操作表中子类化或添加子视图 UIActionSheet 并非设计为子类化 也不应向其层次结构添加视图 苹果文
  • Swift 3 '[UIApplicationLaunchOptionsKey:任意]?'无法转换为 '[String : NSString]'

    我有一个 TVOS 应用程序已从 Swift 2 转换为 Swift 3 但出现以下错误 我不确定如何让它安静下来 UIApplicationLaunchOptionsKey 任意 无法转换为 String NSString 它出现在这段代
  • cordova-plugin-whitelist 适用于 Android,但不适用于 iOS (Phonegap Build)

    我正在开发一个用 Cordova 封装并使用 Phonegap Build 构建的 JavaScript 应用程序 我们包括cordova plugin whitelist来自我们构建中的 npm 并添加了
  • 适用于 iOS 的 Google Cast SDK 2.3.0 不支持 64 位

    似乎是适用于 iOS 的 Google Cast SDK 2 3 0 版本 https developers google com cast downloads GoogleCastFramework 2 3 0 Release zip停止
  • 从 Plist 中存储和检索 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 在 plist 文件中存储两个 NSMutableArray https stackoverflow com questions 6070568 ios store two nsmutable
  • Swift 数组设置索引值不起作用

    我有一个方法 下面的内容 其中queue2只是一个 Int 我打印了很多东西 看看一切是否都正常 public func cool item Int println item println back queue2 insert item
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 如何将十六进制数组转换为 UIImage?

    有几个与使用 P25mi 动态打印图像相关的未解答问题 没有一个得到公认的答案 下面有几个链接 如何将图像转换为位图代码以便在 iPhone 中进行蓝牙打印 https stackoverflow com questions 1383828
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • 在WKWebview中设置useragent

    如何在 WKWebView 中设置自定义用户代理字符串 我正在尝试嵌入我的应用程序的版本 以便我的服务器端可以看到可用的功能 我找到了以下方法 let userAgent MyApp 1 33 7 request setValue user
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • iOS 发送 iMessage 尽可能简单

    我希望能够以编程方式发送 iMessage 除了调用一个将文本发送到带有消息的号码的函数之外 无需执行任何其他操作 这两个消息都是文本框 我真的很感激一些示例代码 因为我在网上搜索过 但我发现没有任何帮助 这不适用于商业应用程序 仅适用于我

随机推荐