use gnustep objective-c
first app
#import <Foundation/Foundation.h>int main(int argc, const char * argv[])
{NSAutoreleasePool *pool = [NSAutoreleasePool new];NSLog(@"first start");[pool drain];return 0;
}
tech
- 专注于概念,而不是迷失在语言技术细节中
- 编程语言的目的是成为一个更好的程序员; 也就是说,在设计和实现新系统以及维护旧系统方面变得更加有效
the basic structure of objc program has
- header preprocess
- interface
- implementation
- method
- variable
- declare and expression
- comment
use interface and implementation
#import <Foundation/Foundation.h>@interface SampleClass:NSObject
- (void)sampleMethod;
@end@implementation SampleClass
- (void)sampleMethod
{NSLog(@"hello from sample class");
}
@endint main()
{SampleClass *sampleClass = [[SampleClass alloc]init];[sampleClass sampleMethod];return 0;
}
type system
- basic integer set and float set
- enum type
- void type
- derive type include pointer, array, struct, union, function
// so far we still use Foundation
int main()
{NSLog(@"type int takes %d\n",sizeof(int));NSLog(@"Storage size for float : %d , maxval=%f \n", sizeof(float), FLT_MAX);int c_i = 1;NSInteger i = 1;NSLog(@"%d\n",i);
}
support c type variable and c type function
void test()
{printf("this is c type function\n");
}#define DEBUG YES
const int G_error_no = 1;// notice that upper case of const is a good style
int main()
{ test();// cosume the c type functionNSLog(@"err no: %d\n",G_error_no);
}
基本运算符(算术,逻辑,位运算)的支持是和c保持一致,这里比较简单
-
https://www.yiibai.com/objective_c/objective_c_operators.html#article-start
method in objc
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 …
joiningArgumentn:( argumentTypen )argumentNamen {
body of the function
}
// skip the class declare and impl
// notice that java style is good style
// and joiningArgument just needed to take its place,but not a real name of argument
-(int)max:(int)num1 secondNumber:(int)num2{if (num1 > num2)return num1;else return num2;
}int main(){// call the method,for example using a classSampleClass *sampleClass = [[SampleClass alloc]init];int ret = [sampleClass max:1 secondNumber:2];printf("%d\n",ret);
}
// 函数参数按值传参和按引用/指针传参是支持的,有机会在深入一遍c语言
block is an instance (error with enable blocks using -fblocks)[notfix]
仅表示单个任务或行为单元而不是方法集合是有意义的(using block),它允许创建不同的代码段,这些代码段可以传递给方法或函数,就像它们是值一样。 块是Objective-C对象,因此它们可以添加到NSArray或NSDictionary等集合中。 它们还能够从封闭范围中捕获值,使其类似于其他编程语言中的闭包或lambda
returntype (^blockName)(argumentType);
returntype (^blockName)(argumentType)= ^{
};
use application.make
#filename must:GNUmakefile
GNUSTEP_MAKEFILES = /usr/share/GNUstep/Makefiles
SRC_DIR = . #this dir is source code directory
include ${GNUSTEP_MAKEFILES}/common.make
APP_NAME = main #name of application
main_OBJC_FILES = $(SRC_DIR)/main.m # a main.m file, if add .m file just add behind, we should have header as well
main_RESOURCE_FILES = # yet I dont know how to use
include ${GNUSTEP_MAKEFILES}/application.make
include ${GNUSTEP_MAKEFILES}/tool.make
include ${GNUSTEP_MAKEFILES}/Master/tool.make
# GNUstep reference may be in `linux mint`: /usr/share/GNUstep/Documentation
- then run make in the makefile folder
code reference
- the above link
Todos
- read the rest post an get this file done
相关文章:
use gnustep objective-c
first app #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSAutoreleasePool *pool [NSAutoreleasePool new];NSLog("first start");[pool drain];return 0; }tech 专注于概念,而不是迷失在语言技术细节中编程语言…...
8.15锁的优化
1.锁升级(锁膨胀) 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 偏向锁:不是真的加锁,而是做了一个标记,如果有别的线程来竞争才会真的加锁,如果没有别的线程竞争就不会加锁. 轻量级锁:一个线程占领锁资源后,另一个线程通过自旋的方式反复确认锁是否被是否(这个过程比较…...
单片机复位电路分析
来分析一下这个电路: 首先这里面有电容,所以是一个动态电路。哈哈哈 假设左上角的电压源是5V的代号为VOLT。 可以知道电容capacitor C1左边的电压也是5V,电容中间隔着一个绝缘体,所以不导电, 这个时候电流无法通过…...
公文写作技巧:“三面镜子”写作提纲60例
写作技巧:“三面镜子”写作提纲60例 1. 用好“三面镜子” 推深做实警示教育 勤用“反光镜”以案为鉴。 善用“显微镜”以案明纪。 巧用“聚光镜”以案促改。 2. 年轻干部要用好“三面镜子” 用好“反光镜”,照亮基层中的“暗点” 用好“显微镜”&am…...
useEffect中的函数会执行2次原因
一、useEffect介绍 useEffect是React18的新特性,表示React的生命周期Hooks组件。等价于Claas组件的componentDidMount、componentDidUpdate,useEffect的返回函数等价于componentWillUnmount。(组件卸载、重新挂载都会触发这个函数,…...
更新k8s环境支付系统支付证书
目录 一、背景 二、更新支付系统银行证书 三、备份旧的secret信息 四、更新支付应用的证书信息 五、重启支付系统的应用 六、验证应用实例挂载的秘钥已更新 一、背景 支付系统是基于k8s容器化部署的微服务,支付系统使用的支付证书以及和银行有关的证书都是保存…...
C#的yield
在 C# 中,yield 关键字用于定义迭代器方法(Iterator Methods),并使其返回一个可枚举的序列。通过使用 yield 关键字,可以简化迭代器的实现,使其更加直观和易于理解。 使用 yield 关键字定义的方法被称为迭…...
外卖多门店小程序开源版开发
外卖多门店小程序开源版开发 外卖多门店小程序开源版的开发可以按照以下步骤进行: 确定需求:明确外卖多门店小程序的功能和特点,包括用户注册登录、浏览菜单、下单支付、订单管理等。技术选型:选择适合开发小程序的技术框架&…...
打印图案、
描述 请编写一个程序,打印下面的图案: 输入 无 输出 打印上述图案 输入样例 1 无 输出样例 1 * * * * * * * * * * * * * * * * * * * * * * * * * 代码一(如下):直接输出 #include <iostream> usin…...
# Windows 环境下载 Android 12源码
前言 Android 官网(该方式不适合 Windows 平台):https://source.android.com/source/downloading.html (备注自 2021 年 6 月 22 日起,安卓操作系统不再支持在 Windows 或 MacOS 上进行构建,如果要编译源码推荐先安装…...
【运维面试】Docker技术面试题总结
【运维面试】Docker技术面试题总结 一、Docker的基础概念1.1 什么是Docker?它可以为我们提供哪些便利?1.2 Docker的优点是什么?1.3 Docker的镜像是什么?1.4 Docker的数据卷是什么?1.5 Docker Compose是什么?1.6 Docker Swarm是什么?1.7 Docker Hub是什么?有哪些用途?1…...
CNN成长路:从AlexNet到EfficientNet(01)
一、说明 在 10年的深度学习中,进步是多么迅速!早在 2012 年,Alexnet 在 ImageNet 上的准确率就达到了 63.3% 的 Top-1。现在,我们超过90%的EfficientNet架构和师生训练(teacher-student)。 如果我们在 Ima…...
使用IDEA操作Mysql数据库
idea中自带了关于数据库的连接 首先要确保你的MySQL正在运行中 打开idea找到database( view —> Tool Windows —> database),大家也可以定个快捷键,方便以后日常操作 就是这个样子,然后点加号 然后就可以编写执…...
ChatGPT下架官方检测工具,承认无法鉴别AI内容
去年底,OpenAI 推出的 ChatGPT ,带来了生成式人工智能涌现的热潮。它不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动。 但随之而来的争议也让人…...
Java通过实例调用getClass()方法、类名.class操作、通过运行时类获取其它信息
说明 Java Object类的getClass()函数,是通过对象调用的,是一个实例方法,该方法返回当前对象的运行时类。 通过类名.class可以获得和通过实例调用getClass()函数一样的信息。 获得运行时类以后,可以进一步获取其它信息。 代码示例…...
UE5+Paperzd问题
TopDown的2D游戏,遇到两个问题,第一问题是游戏一开始就会从tilemap上掉下去。第二个问题是没法和图层2上的物体做碰撞。 一、碰撞问题 1、创建的TileSet后,左侧选中一个tile后,一定要点击上边的Add Box,否则创建出来的…...
K8S系列文章之 自动化运维利器 Ansible
Ansible-安装 第一步:安装我们的epel扩展源 yum -y install epel-release 我这里会报/var/run/yum.pid 已被锁定,如果没有直接进行下一步 [rootmaster home]# yum -y install epel-release 已加载插件:fastestmirror, langpacks /var/run/…...
Julia 字典和集合
数组是一种集合,此外 Julia 也有其他类型的集合,比如字典和 set(无序集合列表)。 字典 字典是一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用 > 分割,每个键值对之间用逗…...
devops-发布vue前端项目
回到目录 将使用jenkinsk8s发布前端项目 1 环境准备 node环境 在部署jenkins的服务器上搭建node环境 node版本 # 1.拉取 https://nodejs.org/download/release/v20.4.0/node-v20.4.0-linux-x64.tar.gz# 2.解压到/usr/local目录下 sudo tar xf v20.4.0.tar.gz -C /usr/loc…...
使用正则表达式设置强密码
文章目录 例子和解析测试工具Java中的应用 例子和解析 强密码需要同时含有大写字母、小写字母、数字、特殊符号。 这边先展示我自己写的。 ^(?.*[a-z])(?.*[A-Z])(?.*[0-9])(?.*[!#$%?])[a-zA-Z0-9!#$%?_]{8,}$以上代8位以上的强密码。 下面是具体解析: ^代…...
CTF逆向新手必看:用Python脚本搞定AES、Z3、Base64这些常见加密(附避坑指南)
CTF逆向实战手册:Python脚本自动化破解高频加密算法 1. 逆向工程中的加密算法挑战 在CTF逆向题目中,加密算法就像迷宫中的隐形墙壁,看似无形却处处设障。最近三年赛事数据显示,AES、Base系列和Z3约束求解三类题型出现频率合计占比…...
用LoRA微调LLaMA2时,你的显存和参数到底省在哪了?一个公式讲明白
LoRA微调LLaMA2的显存优化原理与工程实践指南 当开发者尝试在消费级显卡上微调大语言模型时,显存限制往往成为首要障碍。以LLaMA2-7B为例,全量微调需要约120GB显存,远超RTX 3090等主流显卡的24GB容量。低秩适配(LoRA)技…...
通过curl命令快速测试Taotoken提供的各类大模型效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken提供的各类大模型效果 对于开发者,尤其是运维和测试人员来说,在集成或评估一…...
1990-2023年 全国省市县耕地面积数据 xlsx+tif
01、数据概述 本数据集详尽记录了1990年至2023年间,中国各省市县的耕地面积变化情况。原始数据以Tif栅格格式存储,后经专业处理转化为结构化的省市县面板数据,直观呈现了各地区耕地面积的年度总和。1990-2023年全国省市县耕地面积数据xlsxti…...
Pydantic序列化避坑大全:从‘按声明类型序列化’到灵活exclude/include的5个常见误区
Pydantic序列化深度避坑指南:从类型陷阱到安全控制的实战解析 深夜调试代码时,你是否遇到过这样的场景:明明在内存中完整的对象,通过API返回给前端时却莫名丢失了关键字段?或者当你在日志中打印包含敏感信息的模型时&a…...
Jupyter Notebook 云GPU配置全解析(含实操+选型指南)
一、前言:为什么需要Jupyter Notebook云GPU配置?Jupyter Notebook作为交互式编程工具,广泛应用于AI训练、数据建模、算法调试等场景,其“代码文本”一体化特性,大幅提升开发效率。但本地环境存在明显局限:普…...
告别跑飞!S32K3xx Standby模式唤醒后程序复位?手把手教你用WKPU和RTC保留关键数据
S32K3xx低功耗实战:WKPU与RTC协同解决Standby模式数据丢失难题 引言 在嵌入式系统设计中,低功耗优化一直是工程师们面临的永恒挑战。S32K3xx系列微控制器凭借其出色的电源管理能力,成为汽车电子、工业控制等领域的热门选择。然而,…...
PIC16F驱动WS2812:8位MCU实现无限随机动态灯光算法
1. 项目概述与核心思路 几年前,我在捣鼓一个节日南瓜灯项目时,遇到了一个经典难题:手头只有一片资源极其有限的PIC16F1847微控制器,却想驱动一串WS2812(也就是大家常说的NeoPixel)LED,做出那种看…...
JetBrains IDE 试用期重置指南:3种简单方法恢复30天免费使用
JetBrains IDE 试用期重置指南:3种简单方法恢复30天免费使用 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在紧张的项目开发中,突然发现你的 JetBrains IDE(如 Int…...
Polar SI9000实战:从叠层规划到阻抗计算,一次讲清四层板到八层板的阻抗控制核心
Polar SI9000实战:从叠层规划到阻抗计算,一次讲清四层板到八层板的阻抗控制核心 在高速PCB设计中,阻抗控制早已从"锦上添花"变成了"不可或缺"的基础要求。无论是USB3.0的90欧姆差分对,还是DDR4的40欧姆单端走…...
