在类的dealloc方法中,如何为要解除分配的实例打印ID(或其他一些唯一标识符)?
- (void)dealloc {
NSLog(@"_deallocing: ??");
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我只是想在控制台中获得更多反馈,以帮助学习.
非常感谢-gary-
我正在研究处理大量非常密集流量的Java服务器.服务器接受来自客户端的数据包(通常是几兆字节)并将它们转发给其他客户端.服务器从不显式存储任何传入/传出数据包.然而,服务器不断遇到OutOfMemoryException异常.
我添加System.gc()到服务器的消息传递组件中,希望释放内存.另外,我将JVM的堆大小设置为千兆字节.我仍然得到了许多例外.
所以我的问题是:如何确保兆字节消息无限期排队(尽管不需要)?有没有办法让我在这些对象上调用"delete"来保证它们不使用我的堆空间?
try
{
while (true)
{
int r = generator.nextInt(100);//generate a random number between 0 and 100
Object o =readFromServer.readObject();
sum++;
// if the random number is larger than the drop rate, send the object to client, else
//it will be dropped
if (r > dropRate)
{
writeToClient.writeObject(o);
writeToClient.flush();
numOfSend++;
System.out.printf("No. %d send\n",sum);
}//if
}//while
}//try
Run Code Online (Sandbox Code Playgroud) 在Objective C中创建自定义类时,该dealloc方法何时以及如何调用?这是我必须在课堂上以某种方式实现的吗?
这是我自从更新iOS 7应用程序以来一直遇到的一个新问题.每次我在设备或模拟器上启动应用程序时,都会收到此错误代码
RecipeDetailViewController scrollViewDidScroll:]:发送到解除分配的实例0x15746c40的消息,它崩溃了.
我启用了NSZombie,这就是它给我的代码.在它给出一个exc_bad_access代码之前.
这是我的ScrollViewDidSCroll代码
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
// Depending on how far the user scrolled, set the new offset.
// Divide by a hundred so we have a sane value. You could adjust this
// for different effects.
// The larger you number divide by, the slower the shadow will change
float shadowOffset = (scrollView.contentOffset.y/1);
// Make sure that the offset doesn't exceed 3 or drop below 0.5
shadowOffset = MIN(MAX(shadowOffset, 0), 0.6);
//Ensure that the shadow radius …Run Code Online (Sandbox Code Playgroud) dealloc方法中语句的顺序是否重要?是否[super dealloc]需要处于方法的顶部?有关系吗?
也在例如viewDidLoad.应该[super viewDidLoad]在方法的顶部?
或者,+(void)初始化的反义词是什么?
这是我的情况:
我有一个类Unit,其 - (id)initWithName:函数从全局NSDictionary中获取数据,该数据是懒惰创建的,在Unit.m文件中定义为:
static NSMutableDictionary*unitLibrary = nil;
我在哪里打电话给[unitLibrary release]?
我知道关于编码风格的讨论往往以灾难和无尽的火焰战结束,但这不是我想达到的目标.在过去十年中,我主要dealloc在Objective-C中看到了两种不同的编码方式.第一个也是最常见的一个是放在dealloc文件的底部.这也是Apple在Xcode默认模板中使用的样式.这背后的逻辑似乎dealloc是在对象的结尾接近时调用的,因此文件的结尾似乎是一个很好的比喻.
另一方面,有几个人倾向于dealloc直接置于@synthesize指令之下.在我看来,这有两个主要的缺点:
我认为的巨大优势是您可以在属性和相应的release消息之间建立直接的可视连接.
另一件事是弄乱已经发布的变量.虽然我不认为这是必要的,特别是在整个变量在dealloc结束后被解构的对象上下文中,我倾向于也只是变量.我习惯于在函数范围内对变量执行此操作,因此我只是符合我的编码风格.
这就是我的大多数课程的样子:
@implementation Bar
@synthesize foo;
- (void)dealloc
{
[foo release], foo = nil;
[super dealloc];
}
// Initializers and other methods…
Run Code Online (Sandbox Code Playgroud)
我已经提到了一些优点和缺点.对于这个话题你有什么看法?什么是你在使用的编码风格dealloc和为什么?我还忘了提到其他优点和缺点吗?
我不想在这里开始一场火焰战争.我只是想知道你使用什么样的风格,如果你有特定的理由,或者这对你最终无关紧要.
我想知道如果仍有一些操作正在运行,那么解除一个ivar NSOperationQueue的正确方法是什么,这通常会在用户突然退出应用程序时发生.在一些例子中,我看到使用了waitUntilAllOperationsAreFinished,如下所示:
- (void)dealloc {
[_queue cancelAllOperations];
[_queue waitUntilAllOperationsAreFinished];
[_queue release];
...
然而,许多人建议避免这样做,因为它会挂起运行循环.那么发布的正确方法是_queue什么?如果我不等待操作完成并继续发布,会发生什么?
我有一个非常基本的问题.在我看到的一些例子中,对象只是在dealloc方法中释放.在其他情况下,对象被释放然后设置为nil.是否有一个原因?释放有利后设定为零?
我有一个单例类,它会累积数据,直到数据写入我的数据库(如果你想知道为什么我用这种方式实现,请看这里).保存数据后,我想破坏单例.我怎么能在ARC中这样做?或者我是偏执狂,我是否需要销毁它?
*您可能会说这是此问题的副本,但此处接受的答案并不具体,无法提供帮助.它说"你可以声明你明确调用的方法/函数." 这个代码可能是什么样的?如果我无法在方法之外释放对象,我怎么可能在方法中将其拉出来?它还说" 最简单的方法是让一个静态C++类保存它,然后在它的析构函数中释放它." 我不懂C++,但是 - 你真的可以在你的应用程序代码中加入C++类吗?
我的单身实现如下:
+(NHCFamilyStatus *)familyStatus
{
static dispatch_once_t pred;
static NHCFamilyStatus *familyStatusSharedObject=nil;
dispatch_once(&pred, ^
{
familyStatusSharedObject = [[NHCFamilyStatus alloc] init];
});
return familyStatusSharedObject;
}
Run Code Online (Sandbox Code Playgroud) dealloc ×10
objective-c ×5
ios ×2
iphone ×2
cocoa ×1
coding-style ×1
java ×1
memory ×1
nslog ×1
nsoperation ×1
singleton ×1
static ×1
uiscrollview ×1