我需要构建一个操作系统,一个非常小的基本操作系统,实际上功能最少,用C编码.
可能是一个CUI操作系统,它做一些内存管理,至少有一个文本编辑器和一个计算器,它只是一个关于如何制作一个完全和直接控制你的硬件的代码的实验.
我仍然需要一个接口,需要输入/输出功能,如printf(&args),scanf(&args).现在我的基本问题是我应该使用现有的标题还是实际从头开始编码,为什么会这样?
我非常感谢你们的帮助和帮助.
基类A有一个子类B,并B有一个子类C.A实现虚拟方法doStuff(),B不实现和C实现.从C,我想调用它A的实现doStuff()(我从内部C执行中执行此操作,doStuff()但这不应该真正重要.)我应该调用:
A::doStuff();
Run Code Online (Sandbox Code Playgroud)
要么:
B::doStuff();
Run Code Online (Sandbox Code Playgroud)
第一个似乎更清楚,因为它指的是实际的实现.另一方面,如果我后来决定B需要的doStuff()不同,那么第二个可能会更有用A.哪个更标准?哪个更危险?
我有点惊讶,B::doStuff()没有触发任何警告,但我认为根据定义B,即使它来自基类,也有一个实现.基类和实现链是否可以任意长且复杂?例如,如果我A通过Z,每个都是前一个的子类,我可以在链中的任何地方实现,并且调用任何类的方法只是"上链"直到找到实现?
我在Apple Watch Programming Guide中看到了这一点:
当您的应用程序的本地或远程通知之一到达用户的iPhone时,iOS会决定是在iPhone上还是在Apple Watch上显示该通知.
有没有办法让通知只出现在手表上?
这是一些代码:
#include <iostream>
int main() {
srand(1);
std::cout << rand() << "\n";
srand(UINT_MAX);
std::cout << rand() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
16807
16807
Run Code Online (Sandbox Code Playgroud)
为什么这两种种子产生相同的结果?它们在连续rand()调用中产生的整个值序列也是相同的。可能值的范围太大,因此纯属巧合。是吗:
rand()(如果是这样,我很好奇那可能是什么)(可能相关:种子 10、100、1000、10000 和 100000 分别产生 168070、1680700、16807000、168070000 和 1680700000。)
我正在将我的App Delegate文件从.m转换为.mm(Objective-C到Objective-C++),以便我可以访问用Objective-C++编写的第三方库.在Objective-C中,我的app委托构建并运行良好.但是当我更改扩展时,项目构建并且我得到链接错误,所有这些都是我用C编写的静态库中缺少的符号.错误是经典链接错误,格式如下:
"MyFunction(arguments)",引自:
- MyAppDelegate.o中的[MyAppDelegate myMethod]
未找到符号
所有问题都在app delegate对象中.我知道我已经准备好编译Objective-C++,因为我的ViewController文件是.mm.所以我的问题有几个部分.
首先,这些符号真的不存在,因为我不能使用它们吗?换句话说,是不是可以从Objective-C++文件访问普通的旧C函数?如果这是真的,那很不幸.我认为几乎所有的Objective-C代码,以及至少构建为.mm的所有Objective-C代码都是有效的Objective-C++.我错了吗?
如果没有,任何想法如何防止这些错误?是否存在Objective-C++中我不了解的标题规则?
感谢您的帮助.
我无法让MPMoviePlayerController在设备上工作.它在模拟器中运行良好,播放五秒钟视频,然后将适当的回调(myMovieFinishedCallback:)发送到视图控制器.当它在设备上运行时,电影永远不会出现,即使我可以毫无问题地追踪[player play].myMovieFinishedCallback:永远不会被调用,也没有错误.正在复制所有正确的资源.知道发生了什么事吗?
这是我用来创建和使用播放器的代码,
更新:我已切换到使用MPMoviePlayerViewController.在设备上电影仍然无法播放,我只是无限期地获得旋转进度轮.即使我将播放器设置为MPMovieControlStyleNone,控件也会短暂闪烁 - 有人知道如何解决这个问题吗?电影是五秒钟,大约1.5 MB,如果这有任何区别.
更新:其他电影文件工作,但我无法弄清楚如何使我的工作.我已经尝试过它作为.mov和.mp4,设置似乎是正确的.知道什么会导致MPMoviePlayer仅在设备上永久显示进度轮吗?
- (void) playMovie
{
NSString *url = [[NSBundle mainBundle]
pathForResource:@"myMovie"
ofType:@"mp4"];
MPMoviePlayerViewController *playerViewController =
[[MPMoviePlayerViewController alloc]
initWithContentURL:[NSURL fileURLWithPath:url]];
playerViewController.moviePlayer.controlStyle = MPMovieControlStyleNone;
playerViewController.moviePlayer.scalingMode = MPMovieScalingModeFill;
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:[playerViewController moviePlayer]];
playerViewController.view.frame = movieView.frame;
[movieView addSubview:playerViewController.view];
//---play movie---
MPMoviePlayerController *player = [playerViewController moviePlayer];
[player play];
}
Run Code Online (Sandbox Code Playgroud) 这是一个微不足道的问题,但我一直在想.
在风格方面(我假设性能相同),在if语句中保留'else'是不是更好?
例如,以下哪项更好:
if (x < 10)
doSomething();
else if (x > 20)
doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
要么
if (x < 10)
doSomething();
if (x > 20)
doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
另一个案例:
if (x < 10)
return;
else doSomething();
Run Code Online (Sandbox Code Playgroud)
要么
if (x < 10)
return;
doSomething();
Run Code Online (Sandbox Code Playgroud)
谢谢,
卢克
在Swift中,这种情况很少见,但最终可能会得到一个非零类型的值,该值具有nil值。如对这个问题的回答所述,这可能是由桥接到Swift的不良Objective-C代码引起的:
- (NSObject * _Nonnull)someObject {
return nil;
}
Run Code Online (Sandbox Code Playgroud)
或通过错误的Swift代码:
class C {}
let x: C? = nil
let y: C = unsafeBitCast(x, to: C.self)
Run Code Online (Sandbox Code Playgroud)
实际上,我已经在中使用了MFMailComposeViewControllerAPI MessageUI。以下代码创建一个非可选的MFMailComposeViewController,但是如果用户尚未在Mail中设置电子邮件帐户,则以下代码将崩溃EXC_BAD_ACCESS:
let mailComposeViewController = MFMailComposeViewController()
print("\(mailComposeViewController)")
Run Code Online (Sandbox Code Playgroud)
调试器显示如下值mailComposeViewController:
mailComposeViewController = (MFMailComposeViewController) 0x0000000000000000
Run Code Online (Sandbox Code Playgroud)
我在这里有几个问题:
unsafeBitCast(_:to:)表示,“断雨燕系统的保障,”但有斯威夫特文档中的一个地方,解释说,这些保证可以被打破,以及如何/何时?mailComposeViewController == nil因为它不是可选的。c++ ×3
objective-c ×3
c ×2
iphone ×2
apple-watch ×1
base-class ×1
coding-style ×1
if-statement ×1
ios ×1
kernel ×1
media ×1
methods ×1
null ×1
nullable ×1
optional ×1
random ×1
srand ×1
subclass ×1
swift ×1
video ×1
virtual ×1
watchkit ×1