显而易见的事实是,Objective-C 中,+ 表示类方法,- 表示实例方法。

但看别人代码过程中,还会发现一种,不带加减号的方法。

@implementation MyViewController

void foo(){
printf("msg from foo...");
} - (void)loadView {
[super loadView];
foo();
} @end
 

这种是混搭的 C 代码。

当然当 C 方法写在 @implementation 内也是可以的,编译器会正确地处理。因为 C 方法严格来说不隶属于类,好的做法是始终写在类实现的外部。

void foo(){
printf("msg from foo...");
} @implementation MyViewController - (void)loadView {
[super loadView];
foo();
} @end
 

C 中获取 Objective-C 的数据

但如果你以为将 C 代码写在 @implementation 内部就可以获取到类里面的数据,那是不现实的。

MyViewController.h

@interface MyViewController ()
@property NSString *someStr;
@end
 

MyViewController.m

@implementation MyViewController
// void foo() { printf(self.someStr); } // Use of undeclared identifier '_someStr'
void foo() { printf(_someStr); } // Use of undeclared identifier '_someStr' - (void)loadView {
[super loadView];
self.someStr = @"some string...";
foo();
} @end
 

正确的做法是将 Objective-C 的对象传递给 C 代码,这样在 C 中便有了一个对象的引用,数据就可以正常获取了。

MyViewController.h

@interface MyViewController : UIViewController

@property NSString *someStr;
- (void)myObjcMethod; @end
 

MyViewController.m

void foo(MyViewController* obj) {
printf("%s\n", [obj.someStr UTF8String]);
[obj myObjcMethod];
} @implementation MyViewController - (void)loadView {
[super loadView];
self.someStr = @"some string...";
foo(self);
} - (void)myObjcMethod {
NSLog(@"msg from my objc method");
} @end
 

相关资源

The text was updated successfully, but these errors were encountered:

Objective-C 中不带加减号的方法的更多相关文章

  1. java中自带时间类使用方法实例 Date,Timestamp,DateFormat

    我们将以Java自带的时间日期类和当中的处理函数进行分析. 一.与时间日期有关的类. java.util.Date. 实现类,其对象具有时间.日期组件. java.util.Calendar. 抽象类 ...

  2. django中的懒加载机制

    懒加载在前端中的意义: 懒加载的主要目的就是作为服务器前端的优化,减少请求次数或者延迟请求数. 实现原理: 先加载一部分数据,当触发某个条件时利用异步加载剩余的数据,新得到的数据不会影响原有数据的显示 ...

  3. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  4. Android什么时候进行View中Background的加载

    对大多数Android的开发者来说,最经常的操作莫过于对界面进行布局,View中背景图片的加载是最经常做的.但是我们很少关注这个过程,这篇文章主要解析view中背景图片加载的流程.了解view中背景图 ...

  5. 想在BD自然排名中脱颖而出吗?加张合适的图片吧!

    经常在BD或gg搜索不难发现有些搜索结果会带有缩略图,类似下图,图文搭配,看着不累 在一大排搜索结果中,都是文字的话,还没认真看就感觉累,如果在这些搜索结果中突然出现一条图文结合的条目,是不是有耳目一 ...

  6. 记得ajax中要带上AntiForgeryToken防止CSRF攻击

    经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可. Html.A ...

  7. jmeter随笔(3)-从csv中获取带引号的数据详情

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  8. 切记ajax中要带上AntiForgeryToken防止CSRF攻击

    在程序项目中经常看到ajax post数据到服务器没有加上防伪标记,导致CSRF被攻击,下面小编通过本篇文章给大家介绍ajax中要带上AntiForgeryToken防止CSRF攻击,感兴趣的朋友一起 ...

  9. jmeter csv中获取带引号的数据详情

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

随机推荐

  1. Python—关于Pandas缺失值问题(国内唯一)

    获取文中的CSV文件用于代码编程以及文章首发地址,请点击下方超链接 获取CSV,用于编程调试请点这 在本文中,我们将使用Python的Pandas库逐步完成许多不同的数据清理任务.具体而言,我们将重点 ...

  2. ionic3 清除navpush的堆栈 (android真机返回键bug)

    清除navpush的堆栈可以使用 方法一:ionic3文档 this.navCtrl.popToRoot(); //直接返回根组件 方法二: push 后再删除之前页面即可. this.navCtrl ...

  3. redis的主从复制(哨兵模式)

    p.p1 { margin: 0; font: 10px ".SF NS Text" } Master以写为主,Slave以读为主 读写分离 容灾恢复 一.一主多从 配置文件修改: ...

  4. BUAAOO第三单元总结

    JML理论基础 JML规定了一些语法,用这些语法可以描述一个方法,一个类的行为,理论基础是离散数学吧 JML常用语法 前置条件: 使用 require + 表达式 ,表达式一般为布尔表达式 副作用: ...

  5. Oracle recover current redo ORA-00600:[4193] (oracle 故障恢复current redo日志ORA-00600:[4193]报错)

    背景:搭建了一套oracle 19c主备库(单实例非CDB,PDB),linux7.5在断电后(没有进行数据库关闭)重启数据库报错如下图,redo当前状态下进行不完全恢复主库后resetlogs 打开 ...

  6. Java实现十个经典排序算法(带动态效果图)

    前言 排序算法是老生常谈的了,但是在面试中也有会被问到,例如有时候,在考察算法能力的时候,不让你写算法,就让你描述一下,某个排序算法的思想以及时间复杂度或空间复杂度.我就遇到过,直接问快排的,所以这次 ...

  7. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像上传-11

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像上传-11 欢迎加QQ群:1026880196 进行交流学习 镜像上传 #controller1 ...

  8. Ananagrams UVA - 156

      Most crossword puzzle fans are used to anagrams - groups of words with the same letters in differe ...

  9. k8s service NodePort 方式向外发布

    k8s service NodePort 方式向外发布 k8s 无头service 方式向内发布 k8s service 服务发现 {ServiceName}.{Namespace}.svc.{Clu ...

  10. mooc人大单元测试3

    @font-face { font-family: Wingdings } @font-face { font-family: 宋体 } @font-face { font-family: " ...